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()33main () 34 { 35 B b{{42}}; 36 new (&b.a) A{666}; 37 assert(std::launder(&b.a)->x == 666); 38 } 39