This one made me think:
class X;
void foo(X* p)
{
delete p;
}
How can we possibly delete p
if we do not even know whether X
has visible destructor? g++ 4.5.1 gives three warnings:
warning: possible problem detected in invocation of delete operator:
warning: 'p' has incomplete type
warning: forward declaration of 'struct X'
And then it says:
note: neither the destructor nor the class-specific operator delete
will be called, even if they are declared when the class is defined.
Wow... are compilers required to diagnose this situation like g++ does? Or is it undefined behavior?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…