111
|
1 // { dg-do run { target c++11 } }
|
|
2 // PR78495 failed to propagate pass-by-value struct to base ctor.
|
|
3
|
131
|
4 static int moves = 0;
|
|
5
|
111
|
6 struct Ptr {
|
|
7 void *ptr = 0;
|
|
8
|
|
9 Ptr() {}
|
|
10 Ptr(Ptr const&) = delete;
|
131
|
11 Ptr(Ptr&& other) : ptr (other.ptr) {moves++;}
|
111
|
12 };
|
|
13
|
|
14 struct Base {
|
|
15 Ptr val;
|
131
|
16 Base(Ptr val_);
|
111
|
17 };
|
|
18
|
|
19 struct Derived: Base {
|
|
20 using Base::Base;
|
|
21 };
|
|
22
|
|
23 void *Foo () {
|
|
24 Ptr ptr;
|
|
25
|
|
26 Derived d(static_cast<Ptr&&>(ptr));
|
|
27
|
|
28 return d.val.ptr;
|
|
29 }
|
|
30
|
|
31 int main () {
|
131
|
32 if (Foo ())
|
|
33 return 1;
|
|
34
|
|
35 if (moves != 2)
|
|
36 return 2;
|
|
37
|
|
38 return 0;
|
111
|
39 }
|
131
|
40
|
|
41 Base::Base(Ptr val_) : val(static_cast<Ptr&&>(val_)) {}
|