1 // { dg-do assemble }
2 class X // Indentation has been done so to see the similarities.
3 {
4 public:
X()5 X() {}
X(X & x)6 X(X& x) {x.i=7;} // { dg-message "note" "" { target c++14_down } } Both functions modify the
bar(X & x)7 void bar(X& x) {x.i=7;} // { dg-message "note" } reference parameter x.
8 int i;
9 };
10
foo()11 X foo() { X x; return x; }
12
main()13 int main()
14 {
15 X x(foo()); // { dg-error "rvalue" "" { target c++14_down } } Compiler doesn't warn about temporary reference.
16 x.bar(foo()); // { dg-error "rvalue" } The same mistake is warned about in this case.
17 }
18