
Isn't it odd that this nonsense is legal c++?
Yes, sort of. Consider: double foo(blah blah blah) { blah blah blah if (x >= 0) return std::sqrt(x); throw std::domain_error("x was negative in foo"); } Here static analysis can tell you that control can never reach the }. But what if we put the throw into a separately compiled function? if (x >= 0) return std::sqrt(x); throw_domain_error("x was negative in foo"); Now the programmer may know, even though the compiler cannot, that control still cannot reach the }. What would have standard do? Force the programmer to insert a return statement that the programmer knows can never be executed? Worse: The C89 standard allows this: double f() { /* no return */ } int main() { f(); return 0; } In other words, a C function that claims to return non-void is allowed to fall off the end as long as its caller does not attempt to use the function's value. Which means that if C++ required a function that returns non-void to throw an exception when falling off the end, it would introduce a C incompatibility. So maybe I'm agreeing that it's odd--but at least there's a reason for it.