diff --git a/flang/lib/Parser/basic-parsers.h b/flang/lib/Parser/basic-parsers.h --- a/flang/lib/Parser/basic-parsers.h +++ b/flang/lib/Parser/basic-parsers.h @@ -729,13 +729,7 @@ return RESULT{}; } else { if constexpr (sizeof...(PARSER) == 1) { - if constexpr (std::is_same_v) { - if (std::get<0>(parsers_).Parse(state)) { - return RESULT{}; - } - } else if (auto arg{std::get<0>(parsers_).Parse(state)}) { - return RESULT{std::move(*arg)}; - } + return ParseOne(state); } else { ApplyArgs results; using Sequence = std::index_sequence_for; @@ -749,6 +743,17 @@ } private: + std::optional ParseOne(ParseState &state) const { + if constexpr (std::is_same_v) { + if (std::get<0>(parsers_).Parse(state)) { + return RESULT{}; + } + } else if (auto arg{std::get<0>(parsers_).Parse(state)}) { + return RESULT{std::move(*arg)}; + } + return std::nullopt; + } + const std::tuple parsers_; };