 st8b7c:f320:99b9:690f:4595:cd17:293a:c069construct_at    Defined in header <memory>         template<class T, class... Args>
constexpr T* construct_at( T* p, Args&&... args );
    (since C++20)    Creates a T object initialized with arguments args... at given address p. Specialization of this function template participates in overload resolution only if 8b7c:f320:99b9:690f:4595:cd17:293a:c069new(st8b7c:f320:99b9:690f:4595:cd17:293a:c069declval<void*>()) T(st8b7c:f320:99b9:690f:4595:cd17:293a:c069declval<Args>()...) is well-formed in an unevaluated context.
Equivalent to.
return 8b7c:f320:99b9:690f:4595:cd17:293a:c069new (const_cast<void*>(static_cast<const volatile void*>(p)))
    T(st8b7c:f320:99b9:690f:4595:cd17:293a:c069forward<Args>(args)...); except that construct_at may be used in evaluation of constant expressions.
When construct_at is called in the evaluation of some constant expression e, the argument p must point to either storage obtained by st8b7c:f320:99b9:690f:4595:cd17:293a:c069allocator<T>8b7c:f320:99b9:690f:4595:cd17:293a:c069llocate 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  #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} { st8b7c:f320:99b9:690f:4595:cd17:293a:c069cout << "S8b7c:f320:99b9:690f:4595:cd17:293a:c069S();\n"; }
 
    ~S() { st8b7c:f320:99b9:690f:4595:cd17:293a:c069cout << "S8b7c:f320:99b9:690f:4595:cd17:293a:c069~S();\n"; }
 
    void print() const {
        st8b7c:f320:99b9:690f:4595:cd17:293a:c069cout << "S { x=" << x << "; y=" << y << "; z=" << z << "; };\n";
    }
};
 
int main()
{
    alignas(S) unsigned char storage[sizeof(S)];
 
    S* ptr = st8b7c:f320:99b9:690f:4595:cd17:293a:c069construct_at(reinterpret_cast<S*>(storage), 42, 2.71828f, 3.1415);
    ptr->print();
 
    st8b7c:f320:99b9:690f:4595:cd17:293a:c069destroy_at(ptr);
} Output:
S8b7c:f320:99b9:690f:4595:cd17:293a:c069S();
S { x=42; y=2.71828; z=3.1415; };
S8b7c:f320:99b9:690f:4595:cd17:293a:c069~S();   See also     allocate   allocates uninitialized storage  (public member function of st8b7c:f320:99b9:690f:4595:cd17:293a:c069allocator<T>) 
    construct
[static]   constructs an object in the allocated storage  (function template) 
    destroy_at
(C++17)   destroys an object at a given address  (function template) 
    ranges8b7c:f320:99b9:690f:4595:cd17:293a:c069onstruct_at
(C++20)   creates an object at a given address  (niebloid) 
  

    
{'path': 'public/docs/cpp/memory/construct_at.html', 'source': 'DevDocs.IO'}