template<class T> [[nodiscard]] constexpr T* launder(T* p) noexcept;
struct X { const int n; };
X *p = new X{3};
const int a = p->n;
new (p) X{5}; // p does not point to new object ([basic.life]) because X::n is const
const int b = p->n; // undefined behavior
const int c = std::launder(p)->n; // OK
— end example