• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1[#one_char]
2[section one_char]
3
4[h1 Synopsis]
5
6  struct one_char;
7
8This is a [link parser parser].
9
10[h1 Description]
11
12`one_char` accepts one character. The result of parsing is the accepted
13character. It fails for empty input.
14
15[h1 Header]
16
17  #include <boost/metaparse/one_char.hpp>
18
19[h1 Expression semantics]
20
21For any `s` non-empty compile-time string and `pos` source position the
22following are equivalent
23
24  get_result<one_char::apply<s, pos>>
25
26  boost::mpl::front<s>
27
28  get_remaining<one_char::apply<s, pos>>
29
30  boost::mpl::pop_front<s>
31
32The value of `get_position<one_char::apply<s, pos>>` depends on the first
33character of the sequence and the value of the one parsed before that (which is
34stored in the source position). `one_char` updates the source position's `col`
35and `line` values based on the new line characters. It detects Linux (`\n`),
36Windows (`\r\n`) and Mac (`\r`) line endings.
37
38`one_char::apply<BOOST_METAPARSE_STRING(""), pos>` returns an error for every
39`pos` source position.
40
41[h1 Example]
42
43  #include <boost/metaparse/one_char.hpp>
44  #include <boost/metaparse/start.hpp>
45  #include <boost/metaparse/string.hpp>
46  #include <boost/metaparse/get_result.hpp>
47  #include <boost/metaparse/get_remaining.hpp>
48  #include <boost/metaparse/is_error.hpp>
49
50  #include <type_traits>
51
52  using namespace boost::metaparse;
53
54  static_assert(
55    get_result<
56      one_char::apply<BOOST_METAPARSE_STRING("foo"), start>
57    >::type::value == 'f',
58    "the result of parsing should be the first character of the input"
59  );
60
61  static_assert(
62    std::is_same<
63      BOOST_METAPARSE_STRING("oo"),
64      get_remaining<one_char::apply<BOOST_METAPARSE_STRING("foo"), start>>::type
65    >::type::value,
66    "one_char should consume the first character of the input"
67  );
68
69  static_assert(
70    is_error<one_char::apply<BOOST_METAPARSE_STRING(""), start>>::type::value,
71    "it should return an error for empty input"
72  );
73
74[endsect]
75
76