// Copyright Cromwell D. Enage 2017. // 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 #if ( \ defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) && \ !defined(__MINGW32__) \ ) || ( \ !defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) && \ (10 < BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY) \ ) #if (BOOST_PARAMETER_MAX_ARITY < 10) #error Define BOOST_PARAMETER_MAX_ARITY as 10 or greater. #endif #endif #include namespace test { BOOST_PARAMETER_NAME((_lrc0, keywords) in(lrc0)) BOOST_PARAMETER_NAME((_lr0, keywords) in_out(lr0)) BOOST_PARAMETER_NAME((_rrc0, keywords) in(rrc0)) #if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) BOOST_PARAMETER_NAME((_rr0, keywords) consume(rr0)) #else BOOST_PARAMETER_NAME((_rr0, keywords) rr0) #endif BOOST_PARAMETER_NAME((_lrc1, keywords) in(lrc1)) BOOST_PARAMETER_NAME((_lr1, keywords) out(lr1)) BOOST_PARAMETER_NAME((_rrc1, keywords) in(rrc1)) BOOST_PARAMETER_NAME((_lrc2, keywords) in(lrc2)) BOOST_PARAMETER_NAME((_lr2, keywords) out(lr2)) BOOST_PARAMETER_NAME((_rr2, keywords) rr2) } // namespace test #if ( \ defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) && \ !defined(__MINGW32__) \ ) || ( \ !defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) && \ (10 < BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY) \ ) #include #include #include namespace test { struct g_parameters : boost::parameter::parameters< boost::parameter::required , boost::parameter::required , boost::parameter::required , boost::parameter::required , boost::parameter::required , boost::parameter::required , boost::parameter::required , boost::parameter::optional , boost::parameter::optional , boost::parameter::optional > { }; } // namespace test #endif #include #include "evaluate_category.hpp" namespace test { struct C { template static void evaluate(Args const& args) { BOOST_TEST_EQ( test::passed_by_lvalue_reference_to_const , test::U::evaluate_category<0>(args[test::_lrc0]) ); BOOST_TEST_EQ( test::passed_by_lvalue_reference , test::U::evaluate_category<0>(args[test::_lr0]) ); BOOST_TEST_EQ( test::passed_by_lvalue_reference_to_const , test::U::evaluate_category<1>(args[test::_lrc1]) ); BOOST_TEST_EQ( test::passed_by_lvalue_reference , test::U::evaluate_category<1>(args[test::_lr1]) ); BOOST_TEST_EQ( test::passed_by_lvalue_reference_to_const , test::U::evaluate_category<2>( args[test::_lrc2 | test::lvalue_const_bitset<2>()] ) ); BOOST_TEST_EQ( test::passed_by_lvalue_reference , test::U::evaluate_category<2>( args[test::_lr2 || test::lvalue_bitset_function<2>()] ) ); #if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) BOOST_TEST_EQ( test::passed_by_rvalue_reference_to_const , test::U::evaluate_category<0>(args[test::_rrc0]) ); BOOST_TEST_EQ( test::passed_by_rvalue_reference , test::U::evaluate_category<0>(args[test::_rr0]) ); BOOST_TEST_EQ( test::passed_by_rvalue_reference_to_const , test::U::evaluate_category<1>(args[test::_rrc1]) ); BOOST_TEST_EQ( test::passed_by_rvalue_reference , test::U::evaluate_category<2>( args[test::_rr2 || test::rvalue_bitset_function<2>()] ) ); #else // !defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) BOOST_TEST_EQ( test::passed_by_lvalue_reference_to_const , test::U::evaluate_category<0>(args[test::_rrc0]) ); BOOST_TEST_EQ( test::passed_by_lvalue_reference_to_const , test::U::evaluate_category<0>(args[test::_rr0]) ); BOOST_TEST_EQ( test::passed_by_lvalue_reference_to_const , test::U::evaluate_category<1>(args[test::_rrc1]) ); BOOST_TEST_EQ( test::passed_by_lvalue_reference_to_const , test::U::evaluate_category<2>( args[test::_rr2 || test::rvalue_bitset_function<2>()] ) ); #endif // BOOST_PARAMETER_HAS_PERFECT_FORWARDING } }; } // namespace test #if !defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) #include #endif int main() { #if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) #if defined(__MINGW32__) test::C::evaluate(( test::_rrc1 = test::rvalue_const_bitset<1>() , test::_lrc0 = test::lvalue_const_bitset<0>() , test::_lr0 = test::lvalue_bitset<0>() , test::_rrc0 = test::rvalue_const_bitset<0>() , test::_rr0 = test::rvalue_bitset<0>() , test::_lrc1 = test::lvalue_const_bitset<1>() , test::_lr1 = test::lvalue_bitset<1>() )); test::C::evaluate(( test::_lr0 = test::lvalue_bitset<0>() , test::_rrc0 = test::rvalue_const_bitset<0>() , test::_rr0 = test::rvalue_bitset<0>() , test::_lrc1 = test::lvalue_const_bitset<1>() , test::_lr1 = test::lvalue_bitset<1>() , test::_rrc1 = test::rvalue_const_bitset<1>() , test::_lrc2 = test::lvalue_const_bitset<2>() , test::_lr2 = test::lvalue_bitset<2>() , test::_rr2 = test::rvalue_bitset<2>() , test::_lrc0 = test::lvalue_const_bitset<0>() )); #else // !defined(__MINGW32__) test::C::evaluate( test::g_parameters()( test::lvalue_const_bitset<0>() , test::lvalue_bitset<0>() , test::rvalue_const_bitset<0>() , test::rvalue_bitset<0>() , test::lvalue_const_bitset<1>() , test::lvalue_bitset<1>() , test::rvalue_const_bitset<1>() ) ); test::C::evaluate( test::g_parameters()( test::lvalue_const_bitset<0>() , test::lvalue_bitset<0>() , test::rvalue_const_bitset<0>() , test::rvalue_bitset<0>() , test::lvalue_const_bitset<1>() , test::lvalue_bitset<1>() , test::rvalue_const_bitset<1>() , test::lvalue_const_bitset<2>() , test::lvalue_bitset<2>() , test::rvalue_bitset<2>() ) ); #endif // __MINGW32__ #else // !defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) #if (10 < BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY) test::C::evaluate( test::g_parameters()( test::lvalue_const_bitset<0>() , test::lvalue_bitset<0>() , test::rvalue_const_bitset<0>() , boost::parameter::aux::as_lvalue(test::rvalue_bitset<0>()) , test::lvalue_const_bitset<1>() , test::lvalue_bitset<1>() , test::rvalue_const_bitset<1>() ) ); test::C::evaluate( test::g_parameters()( test::lvalue_const_bitset<0>() , test::lvalue_bitset<0>() , test::rvalue_const_bitset<0>() , boost::parameter::aux::as_lvalue(test::rvalue_bitset<0>()) , test::lvalue_const_bitset<1>() , test::lvalue_bitset<1>() , test::rvalue_const_bitset<1>() , test::lvalue_const_bitset<2>() , test::lvalue_bitset<2>() , boost::parameter::aux::as_lvalue(test::rvalue_bitset<2>()) ) ); #else // !(10 < BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY) test::C::evaluate(( test::_lrc0 = test::lvalue_const_bitset<0>() , test::_lr0 = test::lvalue_bitset<0>() , test::_rrc0 = test::rvalue_const_bitset<0>() , test::_rr0 = boost::parameter::aux::as_lvalue( test::rvalue_bitset<0>() ) , test::_lrc1 = test::lvalue_const_bitset<1>() , test::_lr1 = test::lvalue_bitset<1>() , test::_rrc1 = test::rvalue_const_bitset<1>() )); test::C::evaluate(( test::_lrc0 = test::lvalue_const_bitset<0>() , test::_lr0 = test::lvalue_bitset<0>() , test::_rrc0 = test::rvalue_const_bitset<0>() , test::_rr0 = boost::parameter::aux::as_lvalue( test::rvalue_bitset<0>() ) , test::_lrc1 = test::lvalue_const_bitset<1>() , test::_lr1 = test::lvalue_bitset<1>() , test::_rrc1 = test::rvalue_const_bitset<1>() , test::_lrc2 = test::lvalue_const_bitset<2>() , test::_lr2 = test::lvalue_bitset<2>() , test::_rr2 = boost::parameter::aux::as_lvalue( test::rvalue_bitset<2>() ) )); #endif // (10 < BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY) #endif // BOOST_PARAMETER_HAS_PERFECT_FORWARDING return boost::report_errors(); }