#include #include #include #include #include std::optional digit(char c) { if (c >= '0' && c <= '9') return c - '0'; return std::nullopt; } struct Render { std::string operator()(int n) const { return std::to_string(n); } std::string operator()(const std::string& s) const { return s; } }; int main() { auto zero = digit('0'); assert(zero.has_value() && *zero == 0); assert(!digit('x')); std::variant message = 7; assert(std::visit(Render{}, message) == "7"); message = std::string("ready"); assert(std::get_if(&message) == nullptr); assert(std::visit(Render{}, message) == "ready"); std::cout << *zero << ' ' << std::visit(Render{}, message) << '\n'; }