2018-11-07 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / g++.dg / cpp1z / launder4.C
blob3a65eb27f2e86958afca4265f683a11d215e21be
1 // { dg-do run { target c++11 } }
2 // { dg-additional-options "-O2" }
4 #include <cassert>
6 void *
7 operator new (decltype (sizeof (0)), void *p)
9   return p;
12 namespace std
14   template <typename T>
15   T *
16   launder (T *p)
17   {
18     return __builtin_launder (p);
19   }
22 struct A
24   int& x;
27 struct B
29   A a;
32 int
33 main ()
35   int x = 42;
36   B b{{x}};
37   int y = 666;
38   new (&b.a) A{y};
39   assert(std::launder(&b.a)->x == 666);