If the following returns a temporary and you call a member function on it that modifies member data, why is it legal when the temporary is an rvalue? Remember, temporaries can't be bound to non-const references - to prevent modification - because they're non-addressable just like a literal number 5 is (at least conceptionally). So why is this allowed, when the other is not and they're both rvalues?
Code:class X{...}; X().ModifyMembers(); // modifies member data of a temporary object