// PR c++/115754 // { dg-do compile { target c++26 } } namespace std { using size_t = decltype (sizeof 0); template struct allocator { constexpr allocator () noexcept {} constexpr T *allocate (size_t n) { return static_cast (::operator new (n * sizeof(T))); } constexpr void deallocate (T *p, size_t n) { ::operator delete (p); } }; } constexpr void * operator new (std::size_t, void *p) noexcept { return p; } constexpr bool foo () { std::allocator a; auto b = a.allocate (1); ::new (b) int (); a.deallocate (b, 1); return true; } constexpr bool a = foo ();