title: std::construct_at which default initializes?
body: <p><a href="https://en.cppreference.com/w/cpp/memory/construct_at" rel="nofollow noreferrer"><code>std::construct_at</code></a> is equivalent to</p>
  <pre><code>template&lt;class T, class... Args&gt;
  constexpr T* construct_at( T* p, Args&amp;&amp;... args ) {
      return ::new (const_cast&lt;void*&gt;(static_cast&lt;const volatile void*&gt;(p)))
          T(std::forward&lt;Args&gt;(args)...);
  }
  </code></pre>
  <p>except that <code>construct_at</code> may be used in evaluation of constant expressions.</p>
  <p>As you can see, if no <code>args</code> are given, it will value initialize the object. Is there a way to achieve default initialization? To call the equivalent of <code>::new (p) T;</code> (note the lack of parenthesis).</p>
  <p>In other words, is it possible to execute default initialization with placement new which can be used in constant expressions?</p>