C++ 11 Spec (n3485) 섹션 5.3.7을 보면 note 3은 noexcept (expr)의 결과가 false 인 경우 다음과 같이 나타냅니다.noexcept (expression) - expression이 실제로 throw하는 noexcept 함수 인 경우
... 비 던져 예외 지정 ... 잠재적으로 평가 된throw-expression ... 잠재적으로 평가 된 dynamic_cast가없는 잠재적으로 평가 된 함수 ...를 호출합니다. .. 잠재적으로 평가 된 typeid 표현식 ...
"잠재적으로 평가되는 ted "는 그것이 드릴 다운된다는 것을 의미합니다 (전혀 아닙니다? 약간?) 조건 중 하나가 거짓이 될 수 있는지 결정하기 위해?
나는 (응용 프로그램이 아닌 테스트 코드에서) noexcept라고 주장하는 함수를 찾고 있지만, 실제로 모든 경우에도 예외는 여전히 noexcept로 간주됩니다. 사양을 오해하고 있거나 다음 예제의 코드가 모두 잘못 되었습니까?
double calculate(....) noexcept { throw "haha"; } // using simpsons::nelson
bool does_not_throw = noexcept(calculate());
이 테스트에서는 calculate()가 throw하지 않는다고 말합니다.
'noexcept'는 "이 함수 나 물건에 던져 넣을 수있는 것은 아무것도 없다"는 뜻이 아니며 "이 함수를 벗어나는 예외는 없다는 것을 당신에게 보장하는 언어"를 의미합니다. 만약 필요하다면, 런타임은'noexcept' 함수를 벗어나는 예외를 허용하는 대신에 프로그램을'std :: terminate'로 종료시킴으로써 그 보장을 시행 할 것입니다. (C++ 11 15.4/9) – Casey
@Casey : +1, 감사합니다. – Arbalest