#include <iostream>

struct abc {
        virtual ~abc() {}
    };

    struct d : abc {
        void operator delete(void*) { std::cout << "goodbye\n"; }
    };

    int main() {
        abc *p = new d;
        delete p;
    }
