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

FreeBSD Manual Pages

  
 
  

home | help
std::pmr::p...::construct(3)  C++ Standard Libary std::pmr::p...::construct(3)

NAME
       std::pmr::polymorphic_allocator::construct  - std::pmr::polymorphic_al-
       locator::construct

Synopsis
	  template<	  class	       U,	 class...	 Args	     >
       (1) (since C++17)
	  void construct( U* p,	Args&&... args );
	  template< class T1, class T2,	class... Args1,	class... Args2 >

	  void	       construct(	  std::pair<T1,		T2>*	    p,
       (since C++17)
			  std::piecewise_construct_t,
       (2) (until C++20)
			  std::tuple<Args1...> x,

			  std::tuple<Args2...> y );
	  template<	   class	T1,	    class	  T2	     >
       (3) (since C++17)
	  void	     construct(	      std::pair<T1,	  T2>*	     p	    );
       (until C++20)
	  template<   class   T1,   class   T2,	  class	  U,   class	V    >
       (4) (since C++17)
	  void	 construct(   std::pair<T1,   T2>*   p,	  U&&	x,  V&&	 y  );
       (until C++20)
	  template<   class   T1,   class   T2,	  class	  U,   class	V    >
       (5) (since C++17)
	  void	construct(  std::pair<T1, T2>* p, const	std::pair<U, V>& xy );
       (until C++20)
	  template<   class   T1,   class   T2,	  class	  U,   class	V    >
       (6) (since C++17)
	  void	construct(  std::pair<T1,  T2>*	 p,  std::pair<U,  V>&&	 xy );
       (until C++20)
	  template<    class	T1,    class	T2,    class	 NonPair     >
       (7) (since C++17)
	  void	 construct(   std::pair<T1,  T2>*  p,  NonPair&&  non_pair  );
       (until C++20)

	  Constructs an	object	in  allocated,	but  not  initialized  storage
       pointed to by p the
	  provided constructor arguments. If the object	is of type that	itself
       uses
	  allocators,  or  if  it  is std::pair, passes	*this down to the con-
       structed	object.

	  1) Creates an	object of the given type U by means of	uses-allocator
       construction at
	  the uninitialized memory location indicated by p, using *this	as the
       allocator.
	  This overload	participates in	overload resolution only if U is not a
       specialization
	  of std::pair.
	  (until C++20)

       2)  First, if either T1 or T2 is	allocator-aware, modifies the tuples x
       and y to	include	this->resource(), resulting  in	 the  two  new	tuples
       xprime and yprime, according to the following three rules: 2a) if T1 is
       not    allocator-aware	(std::uses_allocator<T1,   polymorphic_alloca-
       tor>::value==false)	      and	     std::is_constructible<T1,
       Args1...>::value==true, then xprime is x, unmodified.  2b) if T1	is al-
       locator-aware	    (std::uses_allocator<T1,	   polymorphic_alloca-
       tor>::value==true),  and	 its  constructor  takes  an   allocator   tag
       (std::is_constructible<T1, std::allocator_arg_t,	polymorphic_allocator,
       Args1...>::value==true,	then  xprime  is  std::tuple_cat(std::make_tu-
       ple(std::allocator_arg, *this), std::move(x)).  2c) if T1 is allocator-
       aware  (std::uses_allocator<T1,	 polymorphic_allocator>::value==true),
       and   its   constructor	takes  the  allocator  as  the	last  argument
       (std::is_constructible<T1,	 Args1...,	   polymorphic_alloca-
       tor>::value==true),   then   xprime   is	  std::tuple_cat(std::move(x),
       std::make_tuple(*this)).	 2d) Otherwise,	 the  program  is  ill-formed.
       Same  rules  apply  to  T2  and the replacement of y with yprime.  Once
       xprime and yprime are constructed, constructs the pair p	 in  allocated
       storage	as  if	by  ::new((void	*) p) pair<T1, T2>(std::piecewise_con-
       struct, std::move(xprime), std::move(yprime));.	3) Equivalent to  con-
       struct(p,  std::piecewise_construct,  std::tuple<>(),  std::tuple<>()),
       that is,	passes the memory resource on to the pair's  member  types  if
       they	    accept	  them.		4)	  Equivalent	    to
       (until
												 C++20)
       construct(p, std::piecewise_construct,  std::forward_as_tuple(std::for-
       ward<U>(x)),
					      std::forward_as_tuple(std::for-
       ward<V>(y)))

       5) Equivalent to

       construct(p, std::piecewise_construct, std::forward_as_tuple(xy.first),
					      std::forward_as_tuple(xy.sec-
       ond))

       6) Equivalent to

       construct(p,  std::piecewise_construct, std::forward_as_tuple(std::for-
       ward<U>(xy.first)),
					      std::forward_as_tuple(std::for-
       ward<V>(xy.second)))

       7) This overload	participates in	overload resolution only if given  the
       exposition-only function	template

       template<   class   A,	class	B  >  void  /*deduce-as-pair*/(	 const
       std::pair<A, B>&	);

       , /*deduce-as-pair*/(non_pair) is ill-formed when considered as an  un-
       evaluated operand.  Equivalent to

       construct<T1, T2, T1, T2>(p, std::forward<NonPair>(non_pair));

Parameters
	  p	   - pointer to	allocated, but not initialized storage
	  args...  - the constructor arguments to pass to the constructor of T
	  x	    -  the constructor arguments to pass to the	constructor of
       T1
	  y	   - the constructor arguments to pass to the  constructor  of
       T2
	  xy	    - the pair whose two members are the constructor arguments
       for T1 and T2
	  non_pair - non-pair argument to convert to  pair  for	 further  con-
       struction

Return value
	  (none)

Notes
	  This function	is called (through std::allocator_traits) by any allo-
       cator-aware
	  object,  such	 as  std::pmr::vector (or another std::vector that was
       given a
	  std::pmr::polymorphic_allocator as the allocator to use).

	  Defect reports

	  The following	behavior-changing defect reports were applied retroac-
       tively to
	  previously published C++ standards.

	     DR	   Applied to	      Behavior as published		  Cor-
       rect behavior
	  LWG  2969  C++17	 uses-allocator	construction passed	passes
       *this
			      resource()
	  LWG 2975 C++17      first overload  is  mistakenly  used  for	  con-
       strained	to not accept
			      pair construction	in some	cases	     pairs
	  LWG  3525  C++17	 no overload could handle non-pair	recon-
       structing overload
			      types convertible	to pair		     added

See also
	  construct	constructs an object in	the allocated storage
	  [static]	(function template)
	  construct	constructs an object in	allocated storage
	  (until C++20)	(public	member function	of std::allocator<T>)

http://cppreference.com		  2024.06.10	  std::pmr::p...::construct(3)

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

home | help