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