Context
I came across some code, like this:
if( Some_Condition ) throw 0;
I googled a bit, and found a few other code snippets using that odd looking throw 0 form.
I presume one would catch this as:
catch(const int& e)
{ }
Or is this a NULL ptr? to be caught as void* ?
Question
What does this throw 0 do? Is it special in some way?
My normal preference would be to throw something that is (or derived from) std::exception. So to me this looks “bad”.
Is it “bad” ?
Generally throw can throw any type, any you need to catch it with this type or its base type.
So technically it is legal code but…
it is bad code: You should always derive your exceptions from
std::exceptionor at least from some class that provides some useful information about error rather then plain number. But deriving fromstd::exceptionis the correct way because it allows to use topmostcatch(std::exception const &e)and get at least some information about the error.