Originally Posted by
CornedBee
1) Yes.
2) Yes.
3) Constructors don't have a return value. An explicit constructor expression has a value, though - the new object. Still an rvalue, though.
However, there is a special rule that you can invoke member functions on temporary class objects, which converts the rvalue to an lvalue for the purpose of getting the this pointer. In particular, since
T() = t;
is equivalent to
T().operator=(t);
this rule applies. The expression T() still yields an rvalue (you couldn't apply & to it unless it's overloaded), but you can call a member function on it, and within the member, *this is an lvalue.