Это заставило меня подумать:
class X;
void foo(X* p)
{
delete p;
}
Как мы можем delete p
, если мы даже не знаем, имеет ли X
видимый деструктор? g++ 4.5.1 дает три предупреждения:
warning: possible problem detected in invocation of delete operator: warning: 'p' has incomplete type warning: forward declaration of 'struct X'
И затем он говорит:
note: ни деструктор, ни оператор класса не удаляются будут вызываться, даже если они объявлены при определении класса.
Wow... компиляторы, необходимые для диагностики такой ситуации, как g++? Или это поведение undefined?