delete of functions and void * accepted without warning by compiler
Program:
[code]extern "C" int sync();
void f() { delete sync; }[/code]
compiles fine.
This also compiles fine (CC -c s.cc +w2):
[code]void f(void *p) { delete p; }
void g(void *p) { delete [] p; }[/code]
gcc4 gives for first program:
t.cc: In function 'void f()':
t.cc:2: error: cannot delete a function. Only pointer-to-objects are valid arguments to 'delete'
For the second program it gives:
s.cc: In function 'void f(void*)':
s.cc:1: warning: deleting 'void*' is undefined
s.cc: In function 'void g(void*)':
s.cc:2: warning: deleting 'void*' is undefined
I am not a language lawyer, but gcc treatment seems better.
Some refactoring of our code had left a delete sync; in our code after the pointer sync had been removed. It was some work to find out why the program crashed.

