Rationale: Introduce additional expression value categories.
Effect on original feature: Valid C++ 2003 code that uses xvalues as operands for typeid
may change behavior in this revision of C++.
[Example 2: void f(){struct B {
B(){}virtual~B(){}};
struct C { B b; };
typeid(C().b); // unevaluated in C++ 2003, evaluated in C++ 2011} — end example]
Effect on original feature: Valid C++ 2003 code that uses integer division rounds the result toward 0 or
toward negative infinity, whereas this revision of C++ always rounds
the result toward 0.
Rationale: Introduce additional expression value categories.
Effect on original feature: Valid C++ 2003 code that uses xvalues as operands for the conditional operator
may change behavior in this revision of C++.
[Example 4: void f(){struct B {
B(){}
B(const B&){}};
struct D : B {};
struct BB { B b; };
struct DD { D d; };
true? BB().b : DD().d; // additional copy in C++ 2003, no copy or move in C++ 2011} — end example]