| 2277 | typename SkipParser, |
| 2278 | typename... T> |
| 2279 | void apply_parser( |
| 2280 | Parser const & parser, |
| 2281 | Iter & first, |
| 2282 | Sentinel last, |
| 2283 | Context const & context, |
| 2284 | SkipParser const & skip, |
| 2285 | flags flags, |
| 2286 | bool & success, |
| 2287 | std::optional<std::variant<T...>> & retval) |
| 2288 | { |
| 2289 | using attr_t = decltype(parser.call( |
| 2290 | first, last, context, skip, flags, success)); |
| 2291 | if constexpr (std::is_same< |
| 2292 | attr_t, |
| 2293 | std::optional<std::variant<T...>>>{}) { |
| 2294 | parser.call(first, last, context, skip, flags, success, retval); |
| 2295 | } else if constexpr (is_nope_v<attr_t>) { |
| 2296 | parser.call(first, last, context, skip, flags, success); |
| 2297 | } else { |
| 2298 | auto attr = |
| 2299 | parser.call(first, last, context, skip, flags, success); |
| 2300 | if (success) |
| 2301 | detail::assign(retval, std::variant<T...>(std::move(attr))); |
| 2302 | } |
| 2303 | } |
| 2304 | |
| 2305 | template< |
| 2306 | typename Parser, |
no test coverage detected