/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman 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) ==============================================================================*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include int main() { using namespace boost::fusion; namespace fusion = boost::fusion; std::cout << tuple_open('['); std::cout << tuple_close(']'); std::cout << tuple_delimiter(", "); { char const* s = "Ruby"; typedef vector vector_type; vector_type vec(1, 'x', 3.3, s); { typedef vector_iterator i1t; typedef vector_iterator i3t; i1t i1(vec); i3t i3(vec); typedef iterator_range slice_t; slice_t slice(i1, i3); std::cout << slice << std::endl; BOOST_TEST((slice == make_vector('x', 3.3))); BOOST_STATIC_ASSERT(boost::fusion::result_of::size::value == 2); } { typedef vector_iterator i1t; typedef vector_iterator i3t; i1t i1(vec); i3t i3(vec); typedef iterator_range slice_t; slice_t slice(i1, i3); std::cout << slice << std::endl; BOOST_TEST(slice == make_vector()); BOOST_STATIC_ASSERT(boost::fusion::result_of::size::value == 0); } } { typedef boost::mpl::vector_c mpl_vec; typedef boost::mpl::begin::type it0; typedef boost::mpl::next::type it1; typedef boost::mpl::next::type it2; typedef boost::mpl::next::type it3; it1 f; it3 l; typedef iterator_range slice_t; slice_t slice(f, l); std::cout << slice << std::endl; BOOST_TEST((slice == make_vector(3, 4))); BOOST_STATIC_ASSERT(boost::fusion::result_of::size::value == 2); } { typedef map, pair,pair > map_type; map_type m(make_pair("foo"), make_pair('x'), make_pair(2)); typedef iterator_range< boost::fusion::result_of::begin::type , boost::fusion::result_of::advance_c::type,2>::type > range_type; range_type r(begin(m), advance_c<2>(begin(m))); BOOST_MPL_ASSERT((boost::fusion::result_of::has_key::type)); BOOST_MPL_ASSERT((boost::fusion::result_of::has_key::type)); BOOST_MPL_ASSERT((boost::is_same::type>::type, void>)); BOOST_MPL_ASSERT((boost::is_same::type>::type>::type, double>)); BOOST_MPL_ASSERT((boost::is_same::type>::type, std::string>)); BOOST_MPL_ASSERT((boost::is_same::type>::type>::type, char>)); std::cout << deref_data(begin(r)) << std::endl; std::cout << deref_data(fusion::next(begin(r))) << std::endl; BOOST_TEST((deref_data(begin(r)) == "foo")); BOOST_TEST((deref_data(fusion::next(begin(r))) == 'x')); } return boost::report_errors(); }