
Alexander Terekhov wrote:
Sebastian Redl wrote: [...]
unexpected() at throw point.
We don't need noexcept for that; that's what an empty throw declaration does.
I'll let David Abrahams explain it to you. He knows quite well that violation of "throw declaration" under the current standard doesn't result in invocation of unexpected() at *throw point*.
Minor detail that I overlooked in your post. No need to get so condescending. I really don't appreciate it.
Beside that, you're simply not paying attention:
http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2855.html#exception...
"We therefore propose to deprecate C++ exception specifications in C++0x"
So throw() is deprecated. That doesn't change the fact that its behavior is very similar to what you propose for noexcept. But if I were to implement noexcept in a compiler (and actually, there's a good chance I will be the one to implement it in Clang), I might give debug mode a stack of noexcept block locations, which is checked on throw. Add a flag that we're inside a try, and we've pretty much covered it. However, this approach is not suitable for what you want, for two reasons: 1) There's a (small) cost at entering a noexcept or try block. I very much doubt the standards committee would vote for something that prevents zero-cost exceptions. 2) It's not completely reliable. It won't detect the case where we're in a try block that doesn't catch all exceptions, and in particular won't catch the one you're about to throw. I still think that the compile error for noexcept-marked functions is something we definitely want. Sebastian