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()23void *Foo () { 24 Ptr ptr; 25 26 Derived d(static_cast<Ptr&&>(ptr)); 27 28 return d.val.ptr; 29 } 30 main()31int main () { 32 if (Foo ()) 33 return 1; 34 35 if (moves != 2) 36 return 2; 37 38 return 0; 39 } 40 Base(Ptr val_)41Base::Base(Ptr val_) : val(static_cast<Ptr&&>(val_)) {} 42