[PR c++/82878] pass-by-invisiref in lambda
[official-gcc.git] / gcc / testsuite / g++.dg / cpp1z / inh-ctor38.C
blob356c36f5ff61d5041589dc0a999aa539c30b15a0
1 // { dg-do run { target c++11 } }
2 // PR78495 failed to propagate pass-by-value struct to base ctor.
4 static int moves = 0;
6 struct Ptr {
7   void *ptr = 0;
9   Ptr() {}
10   Ptr(Ptr const&) = delete;
11   Ptr(Ptr&& other) : ptr (other.ptr) {moves++;}
14 struct Base {
15   Ptr val;
16   Base(Ptr val_);
19 struct Derived: Base {
20   using Base::Base;
23 void *Foo () {
24   Ptr ptr;
26   Derived d(static_cast<Ptr&&>(ptr));
28   return d.val.ptr;
31 int main () {
32   if (Foo ())
33     return 1;
35   if (moves != 2)
36     return 2;
38   return 0;
41 Base::Base(Ptr val_) : val(static_cast<Ptr&&>(val_)) {}