Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

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

NAME
       std::any_cast - std::any_cast

Synopsis
	  template<class T>				  (1) (since C++17)
	  T any_cast(const any&	operand);
	  template<class T>				  (2) (since C++17)
	  T any_cast(any& operand);
	  template<class T>				  (3) (since C++17)
	  T any_cast(any&& operand);
	  template<class T>				  (4) (since C++17)
	  const	T* any_cast(const any* operand)	noexcept;
	  template<class T>				  (5) (since C++17)
	  T* any_cast(any* operand) noexcept;

	  Performs type-safe access to the contained object.

	  Let U	be std::remove_cv_t<std::remove_reference_t<T>>.

	  1) The program is ill-formed if std::is_constructible_v<T, const U&>
       is false.
	  2)  The  program  is ill-formed if std::is_constructible_v<T,	U&> is
       false.
	  3) The program is ill-formed	if  std::is_constructible_v<T,	U>  is
       false.

Parameters
	  operand - target any object

Return value
	  1-2) Returns static_cast<T>(*std::any_cast<U>(&operand))
	  3) Returns static_cast<T>(std::move(*std::any_cast<U>(&operand))).
	  4-5)	If  operand  is	 not a null pointer, and the typeid of the re-
       quested T matches
	  that of the contents of operand, a pointer to	the value contained by
       operand,
	  otherwise a null pointer.

Exceptions
	  1-3) Throws std::bad_any_cast	if the typeid of the requested T  does
       not match that
	  of the contents of operand.

Example
       // Run this code

	#include <string>
	#include <iostream>
	#include <any>
	#include <utility>

	int main()
	{
	    // simple example

	    auto a = std::any(12);

	    std::cout << std::any_cast<int>(a) << '\n';

	    try	{
		std::cout << std::any_cast<std::string>(a) << '\n';
	    }
	    catch(const	std::bad_any_cast& e) {
		std::cout << e.what() << '\n';
	    }

	    // pointer example

	    if (int* i = std::any_cast<int>(&a)) {
	       std::cout << "a is int: " << *i << '\n';
	    } else if (std::string* s =	std::any_cast<std::string>(&a))	{
	       std::cout << "a is std::string: " << *s << '\n';
	    } else {
	       std::cout << "a is another type or unset\n";
	    }

	    // advanced	example

	    a =	std::string("hello");

	    auto& ra = std::any_cast<std::string&>(a); //< reference
	    ra[1] = 'o';

	    std::cout << "a: "
		<<  std::any_cast<const	 std::string&>(a)  <<  '\n'; //< const
       reference

	    auto b =  std::any_cast<std::string&&>(std::move(a));  //<	rvalue
       reference

	    // Note: 'b' is a move-constructed std::string,
	    // 'a' is left in valid but	unspecified state

	    std::cout << "a: " << *std::any_cast<std::string>(&a) //< pointer
		<< "b: " << b << '\n';
	}

Possible output:
	12
	bad any_cast
	a is int: 12
	a: hollo
	a: b: hollo

http://cppreference.com		  2022.07.31		      std::any_cast(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::any_cast&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help