title: Why operator= is not working for standard types with template placement new?
body: <p>So ~T() works even for standard types (which are not classes/structs) I assumed <code>operator=(const T &amp;)</code> also can be valid as the default method, but it's not:</p>
  <pre><code>#include &lt;new&gt;
  
  template &lt;class T&gt; void foo(T el) {
    alignas(T) unsigned char buf[sizeof(T)];
    T *ptr = new (buf) T(el);
    // error: request for member 'operator=' in '* ptr', which is of non-class type 'int'
    // ptr-&gt;operator=(42);
    ptr-&gt;~T();
  }
  
  int main() { foo(42); }
  </code></pre>
  <p>Is ~T() synthetic construction to standard types for compatibility?</p>