#include #include #include struct Deallocate { void operator()(void* p) const noexcept { ::operator delete(p); } }; struct Token { static int alive; int value; explicit Token(int n) noexcept : value(n) { ++alive; } ~Token() noexcept { --alive; } }; int Token::alive = 0; int main() { std::unique_ptr storage(::operator new(sizeof(Token))); assert(Token::alive == 0); Token* token = ::new (storage.get()) Token(7); assert(Token::alive == 1 && token->value == 7); token->~Token(); assert(Token::alive == 0); }