123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- // Copyright Daniel Wallin 2006.
- // Distributed under the Boost Software License, Version 1.0.
- // (See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- #include <boost/parameter/config.hpp>
- #include <boost/parameter/parameters.hpp>
- #include <boost/parameter/name.hpp>
- #include <boost/parameter/binding.hpp>
- #include "deduced.hpp"
- #if defined(BOOST_PARAMETER_CAN_USE_MP11)
- #include <boost/mp11/bind.hpp>
- #include <boost/mp11/utility.hpp>
- #include <type_traits>
- #else
- #include <boost/mpl/bool.hpp>
- #include <boost/mpl/placeholders.hpp>
- #include <boost/mpl/if.hpp>
- #include <boost/type_traits/is_same.hpp>
- #include <boost/type_traits/is_convertible.hpp>
- #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
- #include <boost/type_traits/remove_reference.hpp>
- #else
- #include <boost/type_traits/add_lvalue_reference.hpp>
- #endif // Borland workarounds needed
- #endif // BOOST_PARAMETER_CAN_USE_MP11
- namespace test {
- BOOST_PARAMETER_NAME(x)
- BOOST_PARAMETER_NAME(y)
- BOOST_PARAMETER_NAME(z)
- } // namespace test
- #include <boost/core/lightweight_test.hpp>
- int main()
- {
- test::check<
- boost::parameter::parameters<
- test::tag::x
- , boost::parameter::optional<
- boost::parameter::deduced<test::tag::y>
- #if defined(BOOST_PARAMETER_CAN_USE_MP11)
- , boost::mp11::mp_bind<
- std::is_same
- , boost::mp11::_1
- , boost::mp11::mp_bind<
- test::tag::x::binding_fn
- , boost::mp11::_2
- >
- >
- #else // !defined(BOOST_PARAMETER_CAN_USE_MP11)
- , boost::mpl::if_<
- boost::is_same<
- #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
- boost::mpl::_1
- , boost::remove_reference<
- boost::parameter::binding<
- boost::mpl::_2
- , test::tag::x
- >
- >
- #else
- boost::add_lvalue_reference<boost::mpl::_1>
- , boost::parameter::binding<boost::mpl::_2,test::tag::x>
- #endif // Borland workarounds needed
- >
- , boost::mpl::true_
- , boost::mpl::false_
- >
- #endif // BOOST_PARAMETER_CAN_USE_MP11
- >
- >
- >((test::_x = 0, test::_y = 1), 0, 1);
- test::check<
- boost::parameter::parameters<
- test::tag::x
- , boost::parameter::optional<
- boost::parameter::deduced<test::tag::y>
- #if defined(BOOST_PARAMETER_CAN_USE_MP11)
- , boost::mp11::mp_bind<
- std::is_same
- , boost::mp11::_1
- , boost::mp11::mp_bind<
- test::tag::x::binding_fn
- , boost::mp11::_2
- >
- >
- #else // !defined(BOOST_PARAMETER_CAN_USE_MP11)
- , boost::mpl::if_<
- boost::is_same<
- #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
- boost::mpl::_1
- , boost::remove_reference<
- boost::parameter::binding<
- boost::mpl::_2
- , test::tag::x
- >
- >
- #else
- boost::add_lvalue_reference<boost::mpl::_1>
- , boost::parameter::binding<boost::mpl::_2,test::tag::x>
- #endif // Borland workarounds needed
- >
- , boost::mpl::true_
- , boost::mpl::false_
- >
- #endif // BOOST_PARAMETER_CAN_USE_MP11
- >
- >
- >((test::_x = 0U, test::_y = 1U), 0U, 1U);
- test::check<
- boost::parameter::parameters<
- test::tag::x
- , boost::parameter::optional<
- boost::parameter::deduced<test::tag::y>
- #if defined(BOOST_PARAMETER_CAN_USE_MP11)
- , boost::mp11::mp_bind<
- std::is_convertible
- , boost::mp11::_1
- , boost::mp11::mp_bind_q<test::tag::x,boost::mp11::_2>
- >
- #else
- , boost::mpl::if_<
- boost::is_convertible<boost::mpl::_1,test::tag::x::_>
- , boost::mpl::true_
- , boost::mpl::false_
- >
- #endif
- >
- >
- >((test::_x = 0, test::_y = 1), 0, 1);
- test::check<
- boost::parameter::parameters<
- test::tag::x
- , boost::parameter::optional<
- boost::parameter::deduced<test::tag::y>
- #if defined(BOOST_PARAMETER_CAN_USE_MP11)
- , boost::mp11::mp_bind<
- std::is_convertible
- , boost::mp11::_1
- , boost::mp11::mp_bind_q<test::tag::x,boost::mp11::_2>
- >
- #else
- , boost::mpl::if_<
- boost::is_convertible<boost::mpl::_1,test::tag::x::_1>
- , boost::mpl::true_
- , boost::mpl::false_
- >
- #endif
- >
- >
- >((test::_x = 0U, test::_y = 1U), 0U, 1U);
- return boost::report_errors();
- }
|