// (C) Copyright John Maddock 2005. // Use, modification and distribution are subject to 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) #ifdef TEST_STD_HEADERS #include #else #include #endif #include #include #include #include #include "verify_return.hpp" struct test_type { int member(); int cmember()const; int member2(char); int cmember2(char)const; }; struct functor1 : public std::unary_function { double operator()(int)const; }; struct functor2 : public std::binary_function { double operator()(int, char)const; }; int main() { BOOST_STATIC_ASSERT((::boost::is_base_and_derived, std::tr1::reference_wrapper >::value)); BOOST_STATIC_ASSERT((::boost::is_base_and_derived, std::tr1::reference_wrapper >::value)); BOOST_STATIC_ASSERT((::boost::is_base_and_derived, std::tr1::reference_wrapper >::value)); BOOST_STATIC_ASSERT((::boost::is_base_and_derived, std::tr1::reference_wrapper >::value)); BOOST_STATIC_ASSERT((::boost::is_base_and_derived, std::tr1::reference_wrapper >::value)); BOOST_STATIC_ASSERT((::boost::is_base_and_derived, std::tr1::reference_wrapper >::value)); BOOST_STATIC_ASSERT((::boost::is_base_and_derived, std::tr1::reference_wrapper >::value)); BOOST_STATIC_ASSERT((::boost::is_base_and_derived, std::tr1::reference_wrapper >::value)); BOOST_STATIC_ASSERT((::boost::is_base_and_derived, std::tr1::reference_wrapper >::value)); BOOST_STATIC_ASSERT((::boost::is_base_and_derived, std::tr1::reference_wrapper >::value)); test_type* ptt = 0; test_type const* cptt = 0; int zero = 0; // now check operator(): std::tr1::reference_wrapper* pr1; verify_return_type((*pr1)(0), double()); std::tr1::reference_wrapper* pr2; verify_return_type((*pr2)(0), double()); std::tr1::reference_wrapper* pr3; verify_return_type((*pr3)(ptt), int()); std::tr1::reference_wrapper* pr4; verify_return_type((*pr4)(cptt), int()); std::tr1::reference_wrapper* pr5; verify_return_type((*pr5)(zero), double()); std::tr1::reference_wrapper* pr1b; verify_return_type((*pr1b)(0,0), double()); std::tr1::reference_wrapper* pr2b; verify_return_type((*pr2b)(0,0), double()); std::tr1::reference_wrapper* pr3b; verify_return_type((*pr3b)(ptt,zero), int()); std::tr1::reference_wrapper* pr4b; verify_return_type((*pr4b)(cptt,zero), int()); std::tr1::reference_wrapper* pr5b; verify_return_type((*pr5b)(zero, zero), double()); // check implicit convertion: int i = 0; int& ri = std::tr1::ref(i); const int& cri = std::tr1::cref(i); }