title: `std::launder` not returning correct data for Clang and GCC but is for msvc
body: <p>Why doesn't <code>std::launder</code> return the correct value (2) in CLANG and GCC when the object is in the stack v in the heap? Even using <code>std::launder</code>.
  <code>std::launder</code> is required. See <a href="https://timsong-cpp.github.io/cppwp/n4868/ptr.launder#5" rel="nofollow noreferrer">this</a> which says <code>launder</code>
  is needed when replacing an object const qualified at the top level. This is because
  <a href="https://timsong-cpp.github.io/cppwp/n4868/basic.life#8" rel="nofollow noreferrer">basic.life</a> disallows replacing complete const objects without <code>std::launder</code>, only
  sub-objects.</p>
  <pre><code>#include &lt;memory&gt;
  #include &lt;iostream&gt;
  
  int main()
  {
  struct X { int n; };
  const X *p = new const X{1};
  const X x{1};
  
  std::construct_at(&amp;x, X{2});        // on stack
  const int c = std::launder(&amp;x)-&gt;n;
  
  std::construct_at(p, X{2});         // allocated with new
  const int bc = std::launder(p)-&gt;n;
  
  std::cout &lt;&lt; c &lt;&lt; &quot; &quot; &lt;&lt; '\n';
  std::cout &lt;&lt; bc &lt;&lt; &quot; &quot; &lt;&lt; '\n';
  }
  </code></pre>
  <p>See <a href="https://godbolt.org/z/q5aeqnb8K" rel="nofollow noreferrer">Compiler Explorer</a>.</p>