PR c++/87109 - wrong ctor with maybe-rvalue semantics.
[official-gcc.git] / gcc / testsuite / g++.dg / cpp0x / ref-qual20.C
blobc8bd43643af64612d14e520af37f529dceed7e32
1 // PR c++/87109
2 // { dg-do run { target c++11 } }
4 #include <utility>
6 struct Y {
7   int y;
8   Y(int y_) : y(y_) { }
9 };
10 struct X : public Y {
11   int x;
12   X(int x_, int y_) : x(x_), Y(y_) { }
15 struct A {
16   operator X() & { return { 0, 2 }; }
17   operator X() && { return { 0, -1 }; }
21 f (A a)
23   return a;
27 f2 (A a)
29   return std::move (a);
33 f3 ()
35   A a;
36   return a;
40 f4 ()
42   A a;
43   return std::move (a);
47 f5 ()
49   return A();
52 int
53 main ()
55   Y y1 = f (A());
56   if (y1.y != 2)
57     __builtin_abort ();
58   Y y2 = f2 (A());
59   if (y2.y != -1)
60     __builtin_abort ();
61   Y y3 = f3 ();
62   if (y3.y != 2)
63     __builtin_abort ();
64   Y y4 = f4 ();
65   if (y4.y != -1)
66     __builtin_abort ();
67   Y y5 = f5 ();
68   if (y5.y != -1)
69     __builtin_abort ();