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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::construct_at - std::construct_at

Synopsis
	  Defined in header <memory>
	  template<class T, class... Args>		      (since C++20)
	  constexpr T* construct_at( T*	p, Args&&... args );

	  Creates  a  T	object initialized with	arguments args... at given ad-
       dress p.
	  Specialization of this function template  participates  in  overload
       resolution only if
	  ::new(std::declval<void*>())	 T(std::declval<Args>()...)  is	 well-
       formed in an
	  unevaluated context.

	  Equivalent to

	return ::new (const_cast<void*>(static_cast<const volatile void*>(p)))
	    T(std::forward<Args>(args)...);

	  except that construct_at may be used in evaluation of	 constant  ex-
       pressions.

	  When	construct_at  is called	in the evaluation of some constant ex-
       pression	e, the
	  argument p must point	to either  storage  obtained  by  std::alloca-
       tor<T>::allocate	or
	  an object whose lifetime began within	the evaluation of e.

Parameters
	  p	   -  pointer to the uninitialized storage on which a T	object
       will be
		    constructed
	  args... - arguments used for initialization

Return value
	  p

Example
       // Run this code

	#include <iostream>
	#include <memory>

	struct S {
	    int	x;
	    float y;
	    double z;

	    S(int x, float y, double z)	: x{x},	 y{y},	z{z}  {	 std::cout  <<
       "S::S();\n"; }

	    ~S() { std::cout <<	"S::~S();\n"; }

	    void print() const {
		std::cout << "S	{ x=" << x << "; y=" <<	y << ";	z=" << z << ";
       };\n";
	    }
	};

	int main()
	{
	    alignas(S) unsigned	char storage[sizeof(S)];

	    S*	 ptr  =	 std::construct_at(reinterpret_cast<S*>(storage),  42,
       2.71828f, 3.1415);
	    ptr->print();

	    std::destroy_at(ptr);
	}

Output:
	S::S();
	S { x=42; y=2.71828; z=3.1415; };
	S::~S();

See also
	  allocate	       allocates uninitialized storage
			       (public member function of std::allocator<T>)
	  construct	       constructs an object in the allocated storage
	  [static]	       (function template)
	  destroy_at	       destroys	an object at a given address
	  (C++17)	       (function template)
	  ranges::construct_at creates an object at a given address
	  (C++20)	       (niebloid)

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

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

home | help