Почему мой компилятор MSVC12 не нравится?C++ destructor вызывает оператор удаления?
#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;
}
Я получаю ошибку странным образом на закрывающей фигурной основного():
Ошибка 2 Ошибка C2280: «аннулируются вещь :: оператор удаления (аннулируются *)»: попытка сослаться на удаленную функцию
Если я прокомментирую явный вызов деструктора, ошибка исчезнет, подразумевая, что явный вызов деструктора пытается вызвать оператор delete (void *). Это не создает интуитивного смысла. Как вы можете видеть из кода здесь, я уже управлял своей собственной памятью, и я не хочу, чтобы кто-нибудь называл delete на вещи когда-либо.
Это [компилирует и работает] (http://coliru.stacked-crooked.com/a/b0c0ca91f45c3887) в gcc5, как и должно быть. Что произойдет, если вы скомпилируете в режиме выпуска? – vsoftco
[cpp.sh/3mqd](http://cpp.sh/3mqd) - gcc отлично работает –
У версии с выпуском такая же ошибка. Кажется, это ошибка компилятора? – Kumputer