https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114388
--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Jonathan Wakely from comment #5) > In C++98 the const B& is an lvalue, and in C++11 the B&& is an xvalue which > is a glvalue. Either way, it's correct to treat it as a glvalue of > polymorphic type and evaluate it. Or more precisely, in C++98 it's an lvalue and the rule is that lvalues are evaluated. In C++11 it's an xvalue which is a glvalue, and the rule is that glvalues are evaluated. So even though N3055 isn't a DR, that doesn't matter. The behaviour changed with DR 616 not with N3055.