다음을 통해 공유


/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-listthrow()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 개발 환경에서 이 컴파일러 옵션을 설정하려면

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조하세요.

  2. 구성 속성>C/C++>명령줄 속성 페이지를 선택합니다.

  3. 추가 옵션 속성을 수정하여 포함 /Zc:noexceptTypes 하거나 /Zc:noexceptTypes- 선택한 다음 확인을 선택합니다.

참고 항목

/Zc(규칙)
noexcept
예외 사양(throw)