#include <new>
#include <iostream>
#include <cstdlib>
#include <memory>

struct s {
    static void *operator new(std::size_t size) {
        std::cout << "allocate\n";
        if (void *ptr = std::malloc(size)) {
            return ptr;
        }
        throw std::bad_alloc();
    }
    static void operator delete(void *ptr) {
        std::cout << "deallocate\n";
        std::free(ptr);
    }
};

int main() {
    std::unique_ptr<s> u(new s);
}
