// Copyright 2024 Peter Dimov // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #include #include #include struct F { void operator()() { } char operator()( char x1 ) noexcept { return x1; } int operator()( int x1, int x2 ) const { return 10*x1+x2; } double operator()( float x1, float x2, float x3 ) const noexcept { return 100*x1 + 10*x2 + x3; } }; struct X { }; int main() { using boost::compat::invoke_result_t; using boost::mp11::mp_valid; // nonfunction BOOST_TEST_TRAIT_FALSE(( mp_valid )); BOOST_TEST_TRAIT_FALSE(( mp_valid )); BOOST_TEST_TRAIT_FALSE(( mp_valid )); // function reference BOOST_TEST_TRAIT_SAME( invoke_result_t, void ); BOOST_TEST_TRAIT_SAME( invoke_result_t, char ); BOOST_TEST_TRAIT_SAME( invoke_result_t, int ); BOOST_TEST_TRAIT_SAME( invoke_result_t, double ); BOOST_TEST_TRAIT_FALSE(( mp_valid )); BOOST_TEST_TRAIT_FALSE(( mp_valid )); BOOST_TEST_TRAIT_FALSE(( mp_valid )); // function pointer BOOST_TEST_TRAIT_SAME( invoke_result_t, void ); BOOST_TEST_TRAIT_SAME( invoke_result_t, char ); BOOST_TEST_TRAIT_SAME( invoke_result_t, int ); BOOST_TEST_TRAIT_SAME( invoke_result_t, double ); BOOST_TEST_TRAIT_FALSE(( mp_valid )); BOOST_TEST_TRAIT_FALSE(( mp_valid )); BOOST_TEST_TRAIT_FALSE(( mp_valid )); // object BOOST_TEST_TRAIT_SAME( invoke_result_t, void ); BOOST_TEST_TRAIT_SAME( invoke_result_t, char ); BOOST_TEST_TRAIT_SAME( invoke_result_t, int ); BOOST_TEST_TRAIT_SAME( invoke_result_t, double ); BOOST_TEST_TRAIT_FALSE(( mp_valid )); BOOST_TEST_TRAIT_FALSE(( mp_valid )); // member function pointer BOOST_TEST_TRAIT_SAME( invoke_result_t, void ); BOOST_TEST_TRAIT_SAME( invoke_result_t, char ); BOOST_TEST_TRAIT_SAME( invoke_result_t, int ); BOOST_TEST_TRAIT_SAME( invoke_result_t, double ); BOOST_TEST_TRAIT_FALSE(( mp_valid )); BOOST_TEST_TRAIT_FALSE(( mp_valid )); BOOST_TEST_TRAIT_FALSE(( mp_valid )); BOOST_TEST_TRAIT_FALSE(( mp_valid )); BOOST_TEST_TRAIT_FALSE(( mp_valid )); BOOST_TEST_TRAIT_FALSE(( mp_valid )); BOOST_TEST_TRAIT_FALSE(( mp_valid )); // member data pointer BOOST_TEST_TRAIT_SAME( invoke_result_t, int&& ); BOOST_TEST_TRAIT_SAME( invoke_result_t, int const&& ); BOOST_TEST_TRAIT_SAME( invoke_result_t, int& ); BOOST_TEST_TRAIT_SAME( invoke_result_t, int const& ); BOOST_TEST_TRAIT_SAME( invoke_result_t, int& ); BOOST_TEST_TRAIT_SAME( invoke_result_t, int const& ); BOOST_TEST_TRAIT_FALSE(( mp_valid )); BOOST_TEST_TRAIT_FALSE(( mp_valid )); BOOST_TEST_TRAIT_FALSE(( mp_valid )); return boost::report_errors(); }