/*============================================================================= Copyright (c) 2001-2006 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 int main() { using namespace 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(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(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(result_of::size::value == 2); } return boost::report_errors(); }