title: Assignment operator with reference members
body: <p>Is this a valid way to create an assignment operator with members that are references?</p>
  
  <pre><code>#include &lt;new&gt;
  
  struct A
  {
      int &amp;ref;
      A(int &amp;Ref) : ref(Ref) { }
      A(const A &amp;second) : ref(second.ref) { }
      A &amp;operator =(const A &amp;second)
      {
          if(this == &amp;second)
              return *this;
          this-&gt;~A();
          new(this) A(second);
          return *this;
      }
  }
  </code></pre>
  
  <p>It seems to compile and run fine, but with c++ tendency to surface undefined behavior when least expected, and all the people that say its impossible, I think there is some gotcha I missed. Did I miss anything?</p>