/Zc:noexceptTypes (Pravidla noexceptu C++17)

Standard C++17 vytvoří throw() alias pro noexcept, odebere throw(type-list) a throw(...), a umožňuje určitým typům zahrnout noexcept. Tato změna může způsobit řadu problémů s kompatibilitou zdroje v kódu, které odpovídají C++14 nebo starším. Možnost /Zc:noexceptTypes určuje shodu se standardem C++17. /Zc:noexceptTypes- umožňuje chování jazyka C++14 a starších při kompilaci kódu v režimu C++17.

Syntaxe

/Zc:noexceptTypes[-]

Poznámky

Pokud je zadána /Zc:noexceptTypes možnost, kompilátor odpovídá standardu C++17 a považuje throw() se za alias pro noexcept, odebere throw()type-lista throw(...)a umožňuje, aby určité typy zahrnovaly .noexcept Tato /Zc:noexceptTypes možnost je dostupná jenom v případech, kdy /std:c++17 je povolená nebo novější. /Zc:noexceptTypes je ve výchozím nastavení povolen tak, aby odpovídal standardům ISO C++17 a novějším. Tato /permissive- možnost nemá vliv na /Zc:noexceptTypes. Tuto možnost vypněte tak /Zc:noexceptTypes- , že zadáte, že se má vrátit k chování jazyka C++14 zadaného nebo novějšího noexcept /std:c++17 .

Počínaje sadou Visual Studio 2017 verze 15.5 kompilátor jazyka C++ diagnostikuje v deklaracích v režimu C++17 více neshodných specifikací výjimek nebo při zadání /permissive- možnosti.

Tato ukázka ukazuje, jak se deklarace se specifikátorem výjimky chovají, když /Zc:noexceptTypes je tato možnost nastavená nebo zakázaná. Chcete-li zobrazit chování při nastavení, zkompilujte pomocí cl /EHsc /W4 noexceptTypes.cpp. Chcete-li zobrazit chování při zakázání, zkompilujte pomocí .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
};

Při kompilaci pomocí výchozího nastavení /Zc:noexceptTypesvygeneruje ukázka uvedená upozornění. Pokud chcete aktualizovat kód, použijte místo toho následující:

void f() noexcept;
void f() noexcept { }
void g() noexcept(false);

struct A
{
    virtual void f() noexcept;
};

struct B : A
{
    virtual void f() noexcept { }
};

Další informace o problémech s shodami v jazyce Visual C++ naleznete v tématu Nestandardní chování.

Nastavení tohoto parametru kompilátoru ve vývojovém prostředí Visual Studio

  1. Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.

  2. Vyberte stránku vlastností příkazového řádku C/C++>Vlastnosti>konfigurace.

  3. Upravte vlastnost Další možnosti tak, aby zahrnovala /Zc:noexceptTypes nebo /Zc:noexceptTypes- a pak zvolte OK.

Viz také

/Zc (Shoda)
noexcept
Specifikace výjimek (throw)