#include #include #include #include enum class ParseError { wrong_length, not_digit }; std::expected parse_digit(std::string_view text) { if (text.size() != 1) return std::unexpected(ParseError::wrong_length); const char c = text[0]; if (c < '0' || c > '9') return std::unexpected(ParseError::not_digit); return c - '0'; } int main() { auto good = parse_digit("7"); auto bad = parse_digit("x"); auto empty = parse_digit(""); assert(good && *good == 7); assert(!bad && bad.error() == ParseError::not_digit); assert(!empty && empty.error() == ParseError::wrong_length); std::cout << good.value() << " not_digit\n"; }