#include #include int main() { std::cout << std::boolalpha; // any type std::any a = 1; std::cout << a.type().name() << ": " << std::any_cast(a) << '\n'; a = 3.14; std::cout << a.type().name() << ": " << std::any_cast(a) << '\n'; a = true; std::cout << a.type().name() << ": " << std::any_cast(a) << '\n'; // bad cast try { a = 1; std::cout << std::any_cast(a) << '\n'; } catch (const std::bad_any_cast& e) { std::cout << e.what() << '\n'; } // has value a = 1; if (a.has_value()) { std::cout << a.type().name() << '\n'; } // reset a.reset(); if (!a.has_value()) { std::cout << "no value\n"; } // pointer to contained data a = 1; int* i = std::any_cast(&a); std::cout << *i << "\n"; }