std::visit — apply visitor to variant.
1std::variant<int, std::string, double> v = "hello";23std::visit([](auto&& arg) {4 using T = std::decay_t<decltype(arg)>;5 if constexpr (std::is_same_v<T, int>) {6 std::cout << "int: " << arg;7 } else if constexpr (std::is_same_v<T, std::string>) {8 std::cout << "string: " << arg;9 } else {10 std::cout << "double: " << arg;11 }12}, v);
Overloaded pattern:
1template<class... Ts> struct overloaded : Ts... { using Ts::operator()...; };2template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;34std::visit(overloaded{5 [](int arg) { /* int */ },6 [](const std::string& arg) { /* string */ },7 [](double arg) { /* double */ }8}, v);
Use cases: