c++ destructor calls a delete operator?

Viewed 371

Why does my MSVC12 compiler not like this?

#include <new>

class thing
{
public:
    thing() {}
    ~thing() {}
    static void operator delete(void* ptr) = delete;
};

int main()
{
    int g;
    void* p = &g;
    thing* t1 = new(p) thing();
    t1->~thing();

    return 0;
}

The error I get is oddly on the closing brace of main():

Error 2 error C2280: 'void thing::operator delete(void *)' : attempting to reference a deleted function

If I comment out the explicit destructor call, the error goes away, implying that the explicit destructor call is trying to call operator delete(void*). This does not make intuitive sense. As you can probably see from the code here, I've already managed my own memory, and I don't want anyone to call delete on thing ever.

2 Answers
Related