/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-list
a 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:noexceptTypes
vygeneruje 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
Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.
Vyberte stránku vlastností příkazového řádku C/C++>Vlastnosti>konfigurace.
Upravte vlastnost Další možnosti tak, aby zahrnovala
/Zc:noexceptTypes
nebo/Zc:noexceptTypes-
a pak zvolte OK.