I accidentally called operator delete[] on a ifstream object, instead of on a file name. I expected the compiler to issue an error because delete[] only operates on pointers, not objects. However, the compiler didn't complain (not even a warning).
When debugging this, I saw that the system calls operator void* on the object. Surprisingly, this doesn't even crash (demo).
So I wonder: why does this operator exists in first place?
Is it needed to support the if (!file) syntax? If yes, why not convert it to a safe-bool or use an explicit operator bool instead?