• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1[#if_]
2[section if_]
3
4[h1 Synopsis]
5
6  template <class P, class T, class F>
7  struct if_;
8
9This is a [link parser_combinator parser combinator].
10
11[table Arguments
12  [[Name] [Type]]
13  [[`P`]  [[link parser parser]]]
14  [[`T`]  [[link metaprogramming_value template metaprogramming value]]]
15  [[`F`]  [[link metaprogramming_value template metaprogramming value]]]
16]
17
18[h1 Description]
19
20`if_` always accepts the input string. The result of parsing is `T`, when `P`
21accepts the input and `F` otherwise.
22
23[h1 Header]
24
25  #include <boost/metaparse/if_.hpp>
26
27[h1 Expression semantics]
28
29For any `p` parser, `t` and `f` classes the following are equivalent:
30
31  if_<p, t, f>
32
33  one_of<last_of<p, return_<t>>, return_<f>>
34
35[h1 Example]
36
37  #include <boost/metaparse/if_.hpp>
38  #include <boost/metaparse/int_.hpp>
39  #include <boost/metaparse/string.hpp>
40  #include <boost/metaparse/start.hpp>
41  #include <boost/metaparse/get_result.hpp>
42
43  #include <type_traits>
44
45  using namespace boost::metaparse;
46
47  using int11 = std::integral_constant<int, 11>;
48  using int13 = std::integral_constant<int, 13>;
49
50  static_assert(
51    get_result<
52      if_<int_, int11, int13>::apply<BOOST_METAPARSE_STRING("1234"), start>
53    >::type::value == 11,
54    "When the int_ parser succeeds, the result of parsing should be 11"
55  );
56
57  static_assert(
58    get_result<
59      if_<int_, int11, int13>::apply<BOOST_METAPARSE_STRING("foo"), start>
60    >::type::value == 13,
61    "When the int_ parser fails, the result of parsing should be 13"
62  );
63
64[endsect]
65
66