// Boost.TypeErasure library // // Copyright 2011 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 #define BOOST_TEST_MAIN #include using namespace boost::type_erasure; template struct common : ::boost::mpl::vector< copy_constructible, typeid_ > {}; BOOST_AUTO_TEST_CASE(test_basic) { typedef ::boost::mpl::vector, subscriptable > test_concept; int i[5]; any x(&i[0]); BOOST_CHECK_EQUAL(&x[0], &i[0]); } BOOST_AUTO_TEST_CASE(test_basic_const) { typedef ::boost::mpl::vector, subscriptable > test_concept; int i[5]; const any x(&i[0]); BOOST_CHECK_EQUAL(&x[0], &i[0]); } BOOST_AUTO_TEST_CASE(test_any_result) { typedef ::boost::mpl::vector, common<_a>, subscriptable<_a&, const _self> > test_concept; typedef ::boost::mpl::map< ::boost::mpl::pair<_self, int*>, ::boost::mpl::pair<_a, int> > types; int i[5]; any x(&i[0], make_binding()); any y(x[0]); BOOST_CHECK_EQUAL(any_cast(&y), &i[0]); } BOOST_AUTO_TEST_CASE(test_any_result_const) { typedef ::boost::mpl::vector, common<_a>, subscriptable > test_concept; typedef ::boost::mpl::map< ::boost::mpl::pair<_self, const int*>, ::boost::mpl::pair<_a, int> > types; const int i[5] = { 0, 0, 0, 0, 0 }; any x(&i[0], make_binding()); any y(x[0]); BOOST_CHECK_EQUAL(any_cast(&y), &i[0]); }