Ticket #3322: fusion_test.cc

File fusion_test.cc, 1.7 KB (added by tegtmeye@…, 13 years ago)

Example file

Line 
1#include <boost/fusion/adapted/struct/adapt_struct.hpp>
2#include <boost/fusion/container/vector/vector.hpp>
3#include <boost/fusion/algorithm/query/find.hpp>
4
5#include <boost/type_traits.hpp>
6
7#include <string>
8#include <iostream>
9
10namespace b = boost;
11namespace bf = boost::fusion;
12
13namespace demo
14{
15 struct employee
16 {
17 std::string name;
18 int age;
19 };
20}
21
22// demo::employee is now a Fusion sequence
23BOOST_FUSION_ADAPT_STRUCT(
24 demo::employee,
25 (std::string, name)
26 (int, age))
27
28int main(void)
29{
30 typedef bf::vector<int,float> V1;
31
32 // Find against non-const V1
33 V1 v1(1,2.0);
34
35 BOOST_MPL_ASSERT_NOT(( b::is_same<bf::result_of::find<V1,int>::type,bf::result_of::end<V1>::type> ));
36
37 assert(*bf::find<int>(v1) == 1);
38
39
40 // Find against const V1
41 const V1 const_v1(3,4.0);
42
43 BOOST_MPL_ASSERT_NOT(( b::is_same<bf::result_of::find<const V1,int>::type,bf::result_of::end<const V1>::type> ));
44
45 assert(*bf::find<int>(const_v1) == 3);
46
47 // Find against non-const employee
48 demo::employee e1 = {"Foo",18};
49
50 BOOST_MPL_ASSERT_NOT(( b::is_same<bf::result_of::find<demo::employee,int>::type,bf::result_of::end<demo::employee>::type> ));
51
52 assert(*bf::find<int>(e1) == 18);
53
54 // Find against const employee
55 const demo::employee const_e1 = {"Bar",21};
56
57#if 0
58 BOOST_MPL_ASSERT_NOT(( b::is_same<bf::result_of::find<const demo::employee,int>::type,bf::result_of::end<const demo::employee>::type> ));
59
60 assert(*bf::find<int>(const_e1) == 21);
61#else
62 // note that the find key is a const int
63 BOOST_MPL_ASSERT_NOT(( b::is_same<bf::result_of::find<const demo::employee,const int>::type,bf::result_of::end<const demo::employee>::type> ));
64
65 assert(*bf::find<const int>(const_e1) == 21);
66#endif
67
68 return 0;
69}