/*============================================================================= 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 template class empty_adt{}; BOOST_FUSION_ADAPT_ASSOC_TPL_ADT((T), (empty_adt)(T),) int main() { using namespace boost::fusion; using namespace boost; std::cout << tuple_open('['); std::cout << tuple_close(']'); std::cout << tuple_delimiter(", "); { BOOST_MPL_ASSERT_NOT((traits::is_view >)); empty_adt e; 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; empty_adt e; 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); } { empty_adt e; // 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, void>)); BOOST_MPL_ASSERT_NOT((fusion::result_of::has_key, int>)); return boost::report_errors(); }