std::any
From cppreference.com
 
 
 
 
 
 C++ 
 Feature test macros (C++20)
 Concepts library (C++20)
 Metaprogramming library (C++11)
 Ranges library (C++20)
 Filesystem library (C++17)
 Concurrency support library (C++11)
 Execution control library (C++26)
Utilities library 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  
Relational operators (deprecated in C++20) Integer comparison functions  
 
 
 
 Swap and type operations  Common vocabulary types 
 Type support (basic types, RTTI)
 Library feature-test macros (C++20)
(C++11)
(C++20)
(C++26)
(C++20)
 Coroutine support (C++20)
 Contract support (C++26)
(C++20)(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
  (C++20)(C++20)(C++20)
  (C++20)(C++20)(C++20)
 General utilities
(C++20)(C++20)(C++20)
  (C++20)(C++20)(C++20)
(C++20)
std::any
Defined in header 
 
 
<any> 
 class any;
 
 (since C++17) 
The class any describes a type-safe container for single values of any copy constructible type.
1) An object of class 
any stores an instance of any type that satisfies the constructor requirements or is empty, and this is referred to as the state of the class any object. The stored instance is called the contained object. Two states are equivalent if they are either both empty or if both are not empty and if the contained objects are equivalent.2) The non-member 
any_cast functions provide type-safe access to the contained object.Typically, implementations apply small objects optimization (avoid dynamic allocations) to types for which std::is_nothrow_move_constructible is true.
Contents
[edit] Member functions
Modifiers
Observers
[edit] Non-member functions
[edit] Helper classes
[edit] Notes
| Feature-test macro | Value | Std | Feature | 
|---|---|---|---|
| __cpp_lib_any | 201606L | (C++17) | std::any | 
[edit] Example
Run this code
#include <any> #include <iostream> int main() { std::cout << std::boolalpha ; // any type std::any a = 1; std::cout << a.type().name() << ": " << std::any_cast <int>(a) << '\n'; a = 3.14; std::cout << a.type().name() << ": " << std::any_cast <double>(a) << '\n'; a = true; std::cout << a.type().name() << ": " << std::any_cast <bool>(a) << '\n'; // bad cast try { a = 1; std::cout << std::any_cast <float>(a) << '\n'; } catch (const std::bad_any_cast & e) { std::cout << e.what() << '\n'; } // has value a = 2; if (a.has_value()) std::cout << a.type().name() << ": " << std::any_cast <int>(a) << '\n'; // reset a.reset(); if (!a.has_value()) std::cout << "no value\n"; // pointer to contained data a = 3; int* i = std::any_cast <int>(&a); std::cout << *i << '\n'; }
Possible output:
int: 1 double: 3.14 bool: true bad any_cast int: 2 no value 3
[edit] See also
(C++23)
(class template) [edit]
(C++26)
(class template) [edit]
(C++26)
(class template) [edit]