diff --git a/include/boost/lambda2/lambda2.hpp b/include/boost/lambda2/lambda2.hpp index 87d7c3f..68009a0 100644 --- a/include/boost/lambda2/lambda2.hpp +++ b/include/boost/lambda2/lambda2.hpp @@ -8,6 +8,8 @@ #include #include #include +#include +#include // Same format as BOOST_VERSION: // major * 100000 + minor * 100 + patch @@ -22,6 +24,10 @@ namespace lambda2 template struct lambda2_arg { + template decltype(auto) operator()( A&&... a ) const noexcept + { + return std::get( std::tuple( std::forward(a)... ) ); + } }; #if defined(__cpp_inline_variables) && __cpp_inline_variables >= 201606L diff --git a/test/placeholders.cpp b/test/placeholders.cpp index a29536d..61f8a27 100644 --- a/test/placeholders.cpp +++ b/test/placeholders.cpp @@ -25,5 +25,24 @@ int main() BOOST_TEST_EQ( std::bind(f, _8)( 1, 2, 3, 4, 5, 6, 7, 8 ), 8 ); BOOST_TEST_EQ( std::bind(f, _9)( 1, 2, 3, 4, 5, 6, 7, 8, 9 ), 9 ); + BOOST_TEST_EQ( _1( 1 ), 1 ); + BOOST_TEST_EQ( _2( 1, 2 ), 2 ); + BOOST_TEST_EQ( _3( 1, 2, 3 ), 3 ); + BOOST_TEST_EQ( _4( 1, 2, 3, 4 ), 4 ); + BOOST_TEST_EQ( _5( 1, 2, 3, 4, 5 ), 5 ); + BOOST_TEST_EQ( _6( 1, 2, 3, 4, 5, 6 ), 6 ); + BOOST_TEST_EQ( _7( 1, 2, 3, 4, 5, 6, 7 ), 7 ); + BOOST_TEST_EQ( _8( 1, 2, 3, 4, 5, 6, 7, 8 ), 8 ); + BOOST_TEST_EQ( _9( 1, 2, 3, 4, 5, 6, 7, 8, 9 ), 9 ); + + BOOST_TEST_EQ( _1( 1, 2, 3, 4, 5, 6, 7, 8, 9 ), 1 ); + BOOST_TEST_EQ( _2( 1, 2, 3, 4, 5, 6, 7, 8, 9 ), 2 ); + BOOST_TEST_EQ( _3( 1, 2, 3, 4, 5, 6, 7, 8, 9 ), 3 ); + BOOST_TEST_EQ( _4( 1, 2, 3, 4, 5, 6, 7, 8, 9 ), 4 ); + BOOST_TEST_EQ( _5( 1, 2, 3, 4, 5, 6, 7, 8, 9 ), 5 ); + BOOST_TEST_EQ( _6( 1, 2, 3, 4, 5, 6, 7, 8, 9 ), 6 ); + BOOST_TEST_EQ( _7( 1, 2, 3, 4, 5, 6, 7, 8, 9 ), 7 ); + BOOST_TEST_EQ( _8( 1, 2, 3, 4, 5, 6, 7, 8, 9 ), 8 ); + return boost::report_errors(); }