With the introduction of move semantics, did the rule that you can only bind temporaries to const reference change? non-const seems to extend lifetime just as well.
A getA() { return A();}
A & aref = getA(); //OK
string & str = string("h") + string("i"); //OK again
This is with msvc, destructor for A does not get called before main exits.