66 lines
1.5 KiB
Plaintext
66 lines
1.5 KiB
Plaintext
[#if_]
|
|
[section if_]
|
|
|
|
[h1 Synopsis]
|
|
|
|
template <class P, class T, class F>
|
|
struct if_;
|
|
|
|
This is a [link parser_combinator parser combinator].
|
|
|
|
[table Arguments
|
|
[[Name] [Type]]
|
|
[[`P`] [[link parser parser]]]
|
|
[[`T`] [[link metaprogramming_value template metaprogramming value]]]
|
|
[[`F`] [[link metaprogramming_value template metaprogramming value]]]
|
|
]
|
|
|
|
[h1 Description]
|
|
|
|
`if_` always accepts the input string. The result of parsing is `T`, when `P`
|
|
accepts the input and `F` otherwise.
|
|
|
|
[h1 Header]
|
|
|
|
#include <boost/metaparse/if_.hpp>
|
|
|
|
[h1 Expression semantics]
|
|
|
|
For any `p` parser, `t` and `f` classes the following are equivalent:
|
|
|
|
if_<p, t, f>
|
|
|
|
one_of<last_of<p, return_<t>>, return_<f>>
|
|
|
|
[h1 Example]
|
|
|
|
#include <boost/metaparse/if_.hpp>
|
|
#include <boost/metaparse/int_.hpp>
|
|
#include <boost/metaparse/string.hpp>
|
|
#include <boost/metaparse/start.hpp>
|
|
#include <boost/metaparse/get_result.hpp>
|
|
|
|
#include <type_traits>
|
|
|
|
using namespace boost::metaparse;
|
|
|
|
using int11 = std::integral_constant<int, 11>;
|
|
using int13 = std::integral_constant<int, 13>;
|
|
|
|
static_assert(
|
|
get_result<
|
|
if_<int_, int11, int13>::apply<BOOST_METAPARSE_STRING("1234"), start>
|
|
>::type::value == 11,
|
|
"When the int_ parser succeeds, the result of parsing should be 11"
|
|
);
|
|
|
|
static_assert(
|
|
get_result<
|
|
if_<int_, int11, int13>::apply<BOOST_METAPARSE_STRING("foo"), start>
|
|
>::type::value == 13,
|
|
"When the int_ parser fails, the result of parsing should be 13"
|
|
);
|
|
|
|
[endsect]
|
|
|