]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/metaparse/doc/unless_error.qbk
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / metaparse / doc / unless_error.qbk
1 [#unless_error]
2 [section unless_error]
3
4 [h1 Synopsis]
5
6 template <class T, class NotErrorCase>
7 struct unless_error;
8
9 This is a [link lazy_metafunction lazy template metafunction].
10
11 [table Arguments
12 [[Name] [Type]]
13 [[`T`] [[link accept accept] or [link reject reject] value]]
14 [[`NotErrorCase`] [[link metaprogramming_value template metaprogramming value]]]
15 ]
16
17 [h1 Description]
18
19 Checks if `T` is a parsing error or not. When it is, the result is `T`. When it
20 is not, the result is `NotErrorCase`.
21
22 [h1 Header]
23
24 #include <boost/metaparse/unless_error.hpp>
25
26 [h1 Expression semantics]
27
28 For any `t` and `c` classes the following are equivalent:
29
30 unless_error<t, c>
31
32 boost::mpl::if_<is_error<t::type>::type, t, c>
33
34 [h1 Example]
35
36 #include <boost/metaparse/unless_error.hpp>
37 #include <boost/metaparse/accept.hpp>
38 #include <boost/metaparse/reject.hpp>
39 #include <boost/metaparse/start.hpp>
40 #include <boost/metaparse/string.hpp>
41 #include <boost/metaparse/define_error.hpp>
42
43 #include <type_traits>
44
45 using namespace boost::metaparse;
46
47 BOOST_METAPARSE_DEFINE_ERROR(sample_error, "Sample error message");
48
49 using accept1 =
50 accept<std::integral_constant<int, 11>, BOOST_METAPARSE_STRING("foo"), start>;
51
52 using accept2 =
53 accept<std::integral_constant<int, 13>, BOOST_METAPARSE_STRING("bar"), start>;
54
55 using reject1 = reject<sample_error, start>;
56
57 struct returns_accept1 { using type = accept1; };
58 struct returns_accept2 { using type = accept2; };
59
60 static_assert(
61 std::is_same<accept2, unless_error<accept1, accept2>::type>::type::value,
62 "it returns the second argument when the first argument is an accept"
63 );
64
65 static_assert(
66 std::is_same<reject1, unless_error<reject1, accept2>::type>::type::value,
67 "it returns the first argument when that is a reject"
68 );
69
70 static_assert(
71 std::is_same<
72 accept2,
73 unless_error<returns_accept1, returns_accept2>::type
74 >::type::value,
75 "it supports lazy evaluation"
76 );
77
78 [endsect]
79