#include #include #include #include std::expected parse_int(std::string_view sv) { try { size_t pos = 0; int value = std::stoi(std::string(sv), &pos); if (pos != sv.size()) return std::unexpected("trailing characters"); std::cout << "parsed\n"; // marker for EXPECT return value; } catch (const std::invalid_argument&) { return std::unexpected("invalid integer"); } catch (const std::out_of_range&) { return std::unexpected("out of range"); } } int main(){ auto r1 = parse_int("123"); if (r1) { std::cout << "value=" << *r1 << "\n"; } else { std::cout << "error=" << r1.error() << "\n"; } auto r2 = parse_int("abc"); if (r2) { std::cout << "value=" << *r2 << "\n"; } else { std::cout << "error=" << r2.error() << "\n"; } return 0; }