[#foldl_reject_incomplete1] [section foldl_reject_incomplete1] [h1 Synopsis] template struct foldl_reject_incomplete1; This is a [link parser_combinator parser combinator]. [table Arguments [[Name] [Type]] [[`P`] [[link parser parser]]] [[`State`] [[link metaprogramming_value template metaprogramming value]]] [[`ForwardOp`] [[link metafunction_class template metafunction class] taking two arguments]] ] [h1 Description] The same as [link foldl1 `foldl1`], but once `P` rejects the input, `foldl_reject_incomplete1` checks if `P` consumes any characters before rejecting the input. If so, `foldl_reject_incomplete1` rejects the input with the same error message this last application of `P` returned. Otherwise `foldl_reject_incomplete1` accepts the input and gives the same result as [link foldl1 `foldl1`]. [h1 Header] #include [h1 Expression semantics] For any `p` parser, `t` class, `f` metafunction class taking two arguments, `s` compile-time string and `pos` source position foldl_reject_incomplete1::apply is equivalent to first_of, fail_at_first_char_expected

>::apply [h1 Example] #include #include #include #include #include #include #include #include #include #include #include #include using namespace boost::metaparse; using int_token = token; using plus_token = token>; using plus_int = last_of; using sum_op = boost::mpl::lambda>::type; using ints = foldl_reject_incomplete1, sum_op>; static_assert( get_result< ints::apply >::type::value == 48, "ints should sum the numbers" ); static_assert( is_error< ints::apply >::type::value, "when the last number is missing, it should be an error" ); static_assert( is_error>::type::value, "when no numbers are provided, it should be an error" ); [endsect]