"noexcept 지정자 (및 연산자)"를 연구하면서 간단한 코드를 작성했습니다.C++ 17 예외 지정자 유형 시스템은 어떻게 작동합니까?
void asdf() noexcept {}
int main()
{
auto f = asdf;
std::cout << std::boolalpha << noexcept(f()) << std::endl;
}
인쇄 false
, 심지어 기능 "asdf을"noexcept 지정이다 : 그리고 나는이 코드 조각이 놀랄입니다.
왜이 신비로운 현상이 일어나고 있는지 검색하면서 C++ 17의 "예외 지정자 유형 시스템"인 P0012R1을 발견했습니다.
이 (제안 된) 제안에 따르면, C++ 17; noexcept
은 함수 유형의 일부이므로 위의 코드는 true
입니까? this 질문의 한 라인에서
그리고 하나 더, :
noexcept
지정은 무시 보인다
std::function<void() noexcept> f
C++ (14) 또는 (11) 이 C++ (17)이 코드가 작동 의도 한 바와 같이?
g ++'-std = C++ 1z'없이'noexcept (f())'에'true'를 반환합니다 (그러나 clang은'false'를 반환합니다). – Holt
재미를 위해서'auto f = asdf;'를'void (* f)() noexcept = asdf;'로 변경하십시오. 이제 GCC는 clang이'true'를 인쇄하는 동안'false'를 인쇄합니다. – hvd
@Holt 정보를 제공해 주셔서 감사합니다. MSVC ('false '를 반환)를 사용하고 있습니다. 그들 중 무엇이 다른가? 그것은 g ++ 또는 C++ 14 또는 이전 표준의 버그가'noexcept' 유형 시스템에 대해 아무 것도 지정하지 않았습니까? – Gear