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