/Zc:noexceptTypes
(C++17 noexcept 규칙)
C++17 표준은 , removes 및 throw(...)
, 에 대한 noexcept
별칭을 throw(
type-list
)
만들고 throw()
특정 형식에 포함noexcept
할 수 있도록 합니다. 이 변경으로 인해 C++14 이하를 준수하는 코드에서 여러 소스 호환성 문제가 발생할 수 있습니다. 이 /Zc:noexceptTypes
옵션은 C++17 표준에 대한 규격을 지정합니다. /Zc:noexceptTypes-
는 C++17 모드에서 코드를 컴파일할 때 C++14 및 이전 동작을 허용합니다.
구문
/Zc:noexceptTypes
[-
]
설명
/Zc:noexceptTypes
옵션을 지정하면 컴파일러는 C++17 표준을 준수하고 , 제거type-list
throw(
)
및 throw(...)
, 및 특정 형식에 대한 noexcept
별칭으로 처리 throw()
되며 특정 형식에 포함noexcept
할 수 있습니다. 이 /Zc:noexceptTypes
옵션은 또는 나중에 사용하도록 설정된 경우에만 사용할 수 있습니다 /std:c++17
. /Zc:noexceptTypes
는 ISO C++17 이상 표준을 준수하도록 기본적으로 사용하도록 설정되어 있습니다. 이 /permissive-
옵션은 영향을 /Zc:noexceptTypes
주지 않습니다. C++14 동작 noexcept
/std:c++17
으로 되돌리도록 지정하여 /Zc:noexceptTypes-
이 옵션을 끕니다.
Visual Studio 2017 버전 15.5부터 C++ 컴파일러는 C++17 모드의 선언에서 또는 옵션을 지정할 때 더 일치하지 않는 예외 사양을 /permissive-
진단합니다.
이 샘플에서는 옵션이 설정되거나 비활성화될 때 예외 지정자가 있는 선언이 /Zc:noexceptTypes
작동하는 방식을 보여 줍니다. 설정할 때 동작을 표시하려면 .를 사용하여 cl /EHsc /W4 noexceptTypes.cpp
컴파일합니다. 사용하지 않도록 설정된 경우 동작을 표시하려면 .를 사용하여 cl /EHsc /W4 /Zc:noexceptTypes- noexceptTypes.cpp
컴파일합니다.
// noexceptTypes.cpp
// Compile by using: cl /EHsc /W4 noexceptTypes.cpp
// Compile by using: cl /EHsc /W4 /Zc:noexceptTypes- noexceptTypes.cpp
void f() throw(); // equivalent to void f() noexcept;
void f() { } // warning C5043
void g() throw(...); // warning C5040
struct A
{
virtual void f() throw();
};
struct B : A
{
virtual void f() { } // error C2694
};
기본 설정을 /Zc:noexceptTypes
사용하여 컴파일하면 샘플에서 나열된 경고를 생성합니다. 코드를 업데이트하려면 다음을 대신 사용합니다.
void f() noexcept;
void f() noexcept { }
void g() noexcept(false);
struct A
{
virtual void f() noexcept;
};
struct B : A
{
virtual void f() noexcept { }
};
Visual C++의 규칙과 관련된 문제에 대한 자세한 내용은 Nonstandard Behavior을 참조하세요.
Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면
프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조하세요.
구성 속성>C/C++>명령줄 속성 페이지를 선택합니다.
추가 옵션 속성을 수정하여 포함
/Zc:noexceptTypes
하거나/Zc:noexceptTypes-
선택한 다음 확인을 선택합니다.