Looking at the C++11 Spec (n3485) section 5.3.7, note 3 says that the result of noexcept(expr) is false if:
... a potentially-evaluated call to a function... that does not have a non-throwing exception-specification ... a potentially-evaluated throw-expression ... a potentially-evaluated dynamic_cast ... a potentially-evaluated typeid expression...
Does "potentially evaluated" mean that it drills down (not at all? a little?) to determine if one of the conditions can result in false?
I'm finding that (in test code, not an application) a function that claims to be noexcept but does, in fact, throw (even if in all cases) will still be considered to be noexcept. Am misunderstanding the spec or is the code in the following example all wrong?
double calculate(....) noexcept { throw "haha"; } // using simpsons::nelson
bool does_not_throw = noexcept(calculate());
According to Clang 3.3 this test says that calculate() does not throw.