]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // Copyright Louis Dionne 2013-2016 |
2 | // Distributed under the Boost Software License, Version 1.0. | |
3 | // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) | |
4 | ||
5 | #include <boost/hana/adapt_adt.hpp> | |
6 | #include <boost/hana/assert.hpp> | |
7 | #include <boost/hana/concept/struct.hpp> | |
8 | #include <boost/hana/contains.hpp> | |
9 | #include <boost/hana/string.hpp> | |
10 | ||
11 | #include <laws/base.hpp> | |
12 | namespace hana = boost::hana; | |
13 | using hana::test::ct_eq; | |
14 | ||
15 | ||
16 | namespace ns { | |
17 | struct Data0 { }; | |
18 | struct Data1 { | |
19 | ct_eq<1> get_member1() const { return {}; } | |
20 | }; | |
21 | struct Data2 { | |
22 | ct_eq<1> get_member1() const { return {}; } | |
23 | ct_eq<2> get_member2() const { return {}; } | |
24 | }; | |
25 | struct Data3 { | |
26 | ct_eq<1> get_member1() const { return {}; } | |
27 | ct_eq<2> get_member2() const { return {}; } | |
28 | ct_eq<3> get_member3() const { return {}; } | |
29 | }; | |
30 | } | |
31 | ||
32 | // Note: We use commas in the lambdas to make sure the macro can handle it. | |
33 | BOOST_HANA_ADAPT_ADT(ns::Data0); | |
34 | BOOST_HANA_ADAPT_ADT(ns::Data1, | |
35 | (member1, [](auto const& d) { return 0, d.get_member1(); }) | |
36 | ); | |
37 | BOOST_HANA_ADAPT_ADT(ns::Data2, | |
38 | (member1, [](auto const& d) { return 0, d.get_member1(); }), | |
39 | (member2, [](auto const& d) { return d.get_member2(); }) | |
40 | ); | |
41 | BOOST_HANA_ADAPT_ADT(ns::Data3, | |
42 | (member1, [](auto const& d) { return 0, d.get_member1(); }), | |
43 | (member2, [](auto const& d) { return d.get_member2(); }), | |
44 | (member3, [](auto const& d) { return d.get_member3(); }) | |
45 | ); | |
46 | ||
47 | static_assert(hana::Struct<ns::Data0>::value, ""); | |
48 | static_assert(hana::Struct<ns::Data1>::value, ""); | |
49 | static_assert(hana::Struct<ns::Data2>::value, ""); | |
50 | static_assert(hana::Struct<ns::Data3>::value, ""); | |
51 | ||
52 | int main() { | |
53 | BOOST_HANA_CONSTANT_CHECK(hana::contains(ns::Data1{}, BOOST_HANA_STRING("member1"))); | |
54 | ||
55 | BOOST_HANA_CONSTANT_CHECK(hana::contains(ns::Data2{}, BOOST_HANA_STRING("member1"))); | |
56 | BOOST_HANA_CONSTANT_CHECK(hana::contains(ns::Data2{}, BOOST_HANA_STRING("member2"))); | |
57 | ||
58 | BOOST_HANA_CONSTANT_CHECK(hana::contains(ns::Data3{}, BOOST_HANA_STRING("member1"))); | |
59 | BOOST_HANA_CONSTANT_CHECK(hana::contains(ns::Data3{}, BOOST_HANA_STRING("member2"))); | |
60 | BOOST_HANA_CONSTANT_CHECK(hana::contains(ns::Data3{}, BOOST_HANA_STRING("member3"))); | |
61 | } |