/*============================================================================= Copyright (c) 2016 Kohei Takahashi 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 #include #include #include class empty_adt{}; BOOST_FUSION_ADAPT_ASSOC_ADT_NAMED(::empty_adt,empty_adt,) int main() { using namespace boost::fusion; using namespace boost; std::cout << tuple_open('['); std::cout << tuple_close(']'); std::cout << tuple_delimiter(", "); empty_adt empty; { BOOST_MPL_ASSERT((traits::is_view)); BOOST_STATIC_ASSERT(traits::is_view::value); adapted::empty_adt e(empty); std::cout << e << std::endl; BOOST_TEST(e == make_vector()); BOOST_STATIC_ASSERT(fusion::result_of::size::value == 0); BOOST_MPL_ASSERT((fusion::result_of::empty)); BOOST_MPL_ASSERT((fusion::result_of::equal_to< fusion::result_of::begin::type, fusion::result_of::end::type>)); } { fusion::vector<> v; adapted::empty_adt e(empty); BOOST_TEST(v == e); BOOST_TEST_NOT(e != v); BOOST_TEST_NOT(v < e); BOOST_TEST(v <= e); BOOST_TEST_NOT(e > v); BOOST_TEST(e >= v); } { adapted::empty_adt e(empty); // conversion from empty_adt to vector fusion::vector<> v(e); v = e; // FIXME // conversion from empty_adt to list //fusion::list<> l(e); //l = e; } BOOST_MPL_ASSERT((mpl::is_sequence)); BOOST_MPL_ASSERT_NOT((fusion::result_of::has_key)); BOOST_MPL_ASSERT_NOT((fusion::result_of::has_key)); return boost::report_errors(); }