PR c++/79143
[official-gcc.git] / gcc / testsuite / g++.dg / cpp1z / launder3.C
blob2a2afc5cad1e4cc216a234f945c89b2044c6302c
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   const int x;
27 struct B
29   A a;
32 int
33 main ()
35   B b{{42}};
36   new (&b.a) A{666};
37   assert(std::launder(&b.a)->x == 666);