// Boost.TypeErasure library // // Copyright 2012 Steven Watanabe // // 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) // // $Id$ #include #include #include #include #include #include #include #include #include #include #define BOOST_TEST_MAIN #include using namespace boost::type_erasure; BOOST_AUTO_TEST_CASE(test_deduce_dereference) { typedef ::boost::mpl::vector< copy_constructible<>, typeid_<_a>, dereferenceable >&>, same_type >, _a> > test_concept; int i; any x(&i); any y(*x); BOOST_CHECK_EQUAL(&any_cast(y), &i); } BOOST_MPL_ASSERT(( boost::is_same< deduced >::type, deduced > >)); BOOST_MPL_ASSERT(( boost::is_same >::type, int >)); BOOST_AUTO_TEST_CASE(test_duplicate) { typedef ::boost::mpl::vector< copy_constructible<>, typeid_<_a>, dereferenceable >&>, same_type >, _a>, same_type >, _a> > test_concept; int i; any x(&i); any y(*x); BOOST_CHECK_EQUAL(&any_cast(y), &i); } BOOST_AUTO_TEST_CASE(test_convert) { typedef ::boost::mpl::vector< copy_constructible<>, typeid_<_a>, dereferenceable >&>, same_type >, _a> > test_concept_src; typedef ::boost::mpl::vector< copy_constructible<_b>, typeid_<_c>, dereferenceable >&, _b>, same_type >, _c> > test_concept_dest; int i; any x1(&i); any y1(*x1); any x2(x1); any y2(*x2); BOOST_CHECK_EQUAL(&any_cast(y2), &i); }