Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

one_char_except

Synopsis

template <class C1, class C2, /* ... */, class Cn>
struct one_char_except;

This is a parser.

Table 65. Arguments

Name

Type

C1..Cn

boxed character values


Description

one_char_except accepts one character except any of C1 ... Cn. When the input is empty or begins with one of the non-accepted characters, one_char_except rejects the input. Otherwise it accepts the input and the result of parsing is the character value.

The maximum number of template arguments this class can have is the value the macro BOOST_METAPARSE_LIMIT_ONE_CHAR_EXCEPT_SIZE expands to. Its default value is 10.

Header

#include <boost/metaparse/one_char_except.hpp>

Expression semantics

For any c1, ..., cn boxed characters the following are equivalent

one_char_except<c1, ..., cn>

one_char_except_c<c1::type::value, ..., cn::type::value>

Example

#include <boost/metaparse/one_char_except.hpp>
#include <boost/metaparse/lit_c.hpp>
#include <boost/metaparse/middle_of.hpp>
#include <boost/metaparse/repeated.hpp>
#include <boost/metaparse/start.hpp>
#include <boost/metaparse/string.hpp>
#include <boost/metaparse/get_result.hpp>

#include <boost/mpl/vector.hpp>
#include <boost/mpl/char.hpp>
#include <boost/mpl/equal.hpp>

#include <type_traits>

using namespace boost::metaparse;

using string_literal_parser =
  middle_of<
    lit_c<'"'>,
    repeated<one_char_except<std::integral_constant<char, '"'>>>,
    lit_c<'"'>
  >;

static_assert(
  boost::mpl::equal<
    boost::mpl::vector<
      boost::mpl::char_<'h'>,
      boost::mpl::char_<'e'>,
      boost::mpl::char_<'l'>,
      boost::mpl::char_<'l'>,
      boost::mpl::char_<'o'>
    >,
    get_result<
      string_literal_parser::apply<BOOST_METAPARSE_STRING("\"hello\""), start>
    >::type
  >::type::value,
  "it should return the content of the string literal"
);

PrevUpHomeNext