#include #include #include #include #include #include template struct overloaded : Ts... { using Ts::operator()...; }; template overloaded(Ts...)->overloaded; int main() { std::vector> vec = { 10, 15l, 1.5, "hello" }; for (auto& v : vec) { std::visit(overloaded{ [](auto arg) { std::cout << arg << ' '; }, [](double arg) { std::cout << std::fixed << arg << ' '; }, [](const std::string& arg) { std::cout << std::quoted(arg) << ' '; }, }, v); } }