home | help
std::any(3)		       C++ Standard Libary		     std::any(3)

NAME
     std::any - std::any

Synopsis
	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.

	Implementations are encouraged to avoid dynamic  allocations  for  small
     objects, but
	such an optimization may only be applied to types for which
	std::is_nothrow_move_constructible returns true.

Member functions
	constructor   constructs an any object
		      (public member function)
	operator=     assigns an any object
		      (public member function)
	destructor    destroys an any object
		      (public member function)

Modifiers
	emplace        change  the contained object, constructing the new object
     directly
		      (public member function)
	reset	      destroys contained object
		      (public member function)
	swap	      swaps two any objects
		      (public member function)

Observers
	has_value     checks if object holds a value
		      (public member function)
	type	      returns the typeid of the contained value
		      (public member function)

Non-member functions
	std::swap(std::any) specializes the std::swap algorithm
	(C++17) 	    (function)
	any_cast	    type-safe access to the contained object
	(C++17) 	    (function template)
	make_any	    creates an any object
	(C++17) 	    (function template)

Helper classes
	bad_any_cast exception thrown by the value-returning forms  of	any_cast
     on a type
	(C++17)      mismatch
		     (class)

Notes
	Feature-test macro  Value    Std   Feature
	__cpp_lib_any	   201606L (C++17) std::any

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

See also
	function	   wraps callable object of any copy constructible  type
     with
	(C++11) 	   specified function call signature
			   (class template)
	move_only_function  wraps  callable  object  of  any type with specified
     function call
	(C++23) 	   signature
			   (class template)
	variant 	   a type-safe discriminated union
	(C++17) 	   (class template)
	optional	   a wrapper that may or may not hold an object
	(C++17) 	   (class template)

http://cppreference.com 	   2024.06.10			     std::any(3)

home | help