1 // { dg-do run { target c++11 } }
2 // { dg-additional-options "-O2" }
3 
4 #include <cassert>
5 
6 void *
7 operator new (decltype (sizeof (0)), void *p)
8 {
9   return p;
10 }
11 
12 namespace std
13 {
14   template <typename T>
15   T *
launder(T * p)16   launder (T *p)
17   {
18     return __builtin_launder (p);
19   }
20 }
21 
22 struct A
23 {
24   const int x;
25 };
26 
27 struct B
28 {
29   A a;
30 };
31 
32 int
main()33 main ()
34 {
35   B b{{42}};
36   new (&b.a) A{666};
37   assert(std::launder(&b.a)->x == 666);
38 }
39