13 template<
typename Parser>
14 class OptionalParser :
public ParserBase<OptionalParser<Parser>> {
17 constexpr explicit OptionalParser(InPlace, P&& parser) : m_parser(util::forward<P>(parser)) {}
19 template<concepts::ParserContext Context,
typename Value = meta::ParserValue<Context, Parser>>
20 requires(concepts::Parser<Parser, Context>)
23 return (m_parser.parse(context) |
if_error([&](
auto&&) {
24 context.advance(begin_save);
33 struct OptionalFunction {
34 template<concepts::DecayConstructible Parser>
35 constexpr auto operator()(Parser&& parser)
const {
36 return OptionalParser<meta::Decay<Parser>>(
in_place, util::forward<Parser>(parser));
41constexpr inline auto optional = detail::OptionalFunction {};
43template<concepts::DecayConstructible Parser>
45constexpr auto operator-(Parser&&
parser) {
Definition operations.h:114
constexpr auto begin
Definition begin.h:52
Definition code_point_parser.h:10
constexpr auto optional
Definition optional.h:41
constexpr auto parse
Definition parse.h:23
constexpr auto if_error
Definition if_error.h:28
constexpr auto in_place
Definition in_place.h:8