MCPcopy Create free account
hub / github.com/boostorg/hana / main

Function main

example/tutorial/type.cpp:35–176  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

33struct storage { char weight[n]; };
34
35int main() {
36
37{
38
39//! [tuple]
40auto types = hana::make_tuple(hana::type_c<int*>, hana::type_c<char&>, hana::type_c<void>);
41auto char_ref = types[1_c];
42
43BOOST_HANA_CONSTANT_CHECK(char_ref == hana::type_c<char&>);
44//! [tuple]
45
46}{
47
48//! [filter.MPL]
49using types = mpl::vector<int, char&, void*>;
50using ts = mpl::copy_if<types, mpl::or_<std::is_pointer<mpl::_1>,
51 std::is_reference<mpl::_1>>>::type;
52// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
53// placeholder expression
54
55static_assert(mpl::equal<ts, mpl::vector<char&, void*>>::value, "");
56//! [filter.MPL]
57
58}{
59
60using hana::traits::is_pointer; // the traits namespace was not introduced
61using hana::traits::is_reference; // yet, so we use unqualified names for now
62
63//! [filter.Hana]
64auto types = hana::tuple_t<int*, char&, void>;
65
66auto ts = hana::filter(types, [](auto t) {
67 return is_pointer(t) || is_reference(t);
68});
69
70BOOST_HANA_CONSTANT_CHECK(ts == hana::tuple_t<int*, char&>);
71//! [filter.Hana]
72
73}{
74
75//! [single_library.then]
76// types (MPL)
77using types = mpl::vector<int*, char&, void>;
78using ts = mpl::copy_if<types, mpl::or_<std::is_pointer<mpl::_1>,
79 std::is_reference<mpl::_1>>>::type;
80
81// values (Fusion)
82auto values = fusion::make_vector(1, 'c', nullptr, 3.5);
83auto vs = fusion::filter_if<std::is_integral<mpl::_1>>(values);
84//! [single_library.then]
85
86static_assert(mpl::equal<ts, mpl::vector<int*, char&>>::value, "");
87BOOST_HANA_RUNTIME_CHECK(vs == fusion::make_vector(1, 'c'));
88
89}{
90
91using hana::traits::is_pointer;
92using hana::traits::is_reference;

Callers

nothing calls this directly

Calls 2

transformClass · 0.85
common_typeClass · 0.85

Tested by

no test coverage detected