]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/fusion/test/sequence/define_struct_inline.cpp
1 /*=============================================================================
2 Copyright (c) 2010, 2012 Christopher Schmidt, Nathan Ridge
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
8 #include <boost/detail/lightweight_test.hpp>
9 #include <boost/fusion/sequence.hpp>
10 #include <boost/fusion/container.hpp>
11 #include <boost/fusion/support.hpp>
12 #include <boost/fusion/sequence/io/out.hpp>
13 #include <boost/fusion/adapted/struct/define_struct_inline.hpp>
14 #include <boost/preprocessor/empty.hpp>
15 #include <boost/mpl/assert.hpp>
16 #include <boost/static_assert.hpp>
22 BOOST_FUSION_DEFINE_STRUCT_INLINE(
29 template <typename
= int>
32 BOOST_FUSION_DEFINE_STRUCT_INLINE(
41 BOOST_FUSION_DEFINE_STRUCT_INLINE(s
, (int, m
))
43 BOOST_FUSION_DEFINE_STRUCT_INLINE(empty_struct
, )
45 // Testing non-constexpr compatible types
46 BOOST_FUSION_DEFINE_STRUCT_INLINE(
49 (std::string
, nickname
)
53 template <typename Point
>
56 using namespace boost::fusion
;
58 std::cout
<< tuple_open('[');
59 std::cout
<< tuple_close(']');
60 std::cout
<< tuple_delimiter(", ");
63 BOOST_STATIC_ASSERT(boost::fusion::result_of::size
<ns::empty_struct
>::value
== 0);
64 BOOST_STATIC_ASSERT(boost::fusion::result_of::empty
<ns::empty_struct
>::value
);
68 BOOST_MPL_ASSERT_NOT((traits::is_view
<Point
>));
71 std::cout
<< at_c
<0>(p
) << std::endl
;
72 std::cout
<< at_c
<1>(p
) << std::endl
;
73 std::cout
<< p
<< std::endl
;
74 BOOST_TEST(p
== make_vector(123, 456));
78 BOOST_TEST(p
== make_vector(6, 9));
80 BOOST_STATIC_ASSERT(boost::fusion::result_of::size
<Point
>::value
== 2);
81 BOOST_STATIC_ASSERT(!boost::fusion::result_of::empty
<Point
>::value
);
83 BOOST_TEST(front(p
) == 6);
84 BOOST_TEST(back(p
) == 9);
88 vector
<int, float> v1(4, 2.0f
);
90 vector
<long, double> v3(5, 4.);
102 // conversion from Point to vector
104 vector
<int, long> v(p
);
109 // conversion from Point to list
111 list
<int, long> l(p
);
116 using namespace boost::fusion
;
118 typedef boost::fusion::result_of::begin
<ns::s
>::type b
;
119 typedef boost::fusion::result_of::end
<ns::s
>::type e
;
121 BOOST_MPL_ASSERT((boost::is_same
<boost::fusion::result_of::next
<b
>::type
, e
>));
125 Point p
= make_list(5,3);
126 BOOST_TEST(p
== make_vector(5,3));
129 BOOST_TEST(p
== make_vector(3,5));
136 run_test
<cls::point
>(); // test with non-template enclosing class
137 run_test
<tpl_cls
<>::point
>(); // test with template enclosing class
140 using namespace boost::fusion
;
142 ns::employee emp
= make_list("John Doe", "jdoe");
143 std::cout
<< at_c
<0>(emp
) << std::endl
;
144 std::cout
<< at_c
<1>(emp
) << std::endl
;
146 BOOST_TEST(emp
== make_vector("John Doe", "jdoe"));
149 return boost::report_errors();