/Zc:noexceptTypes
(C++17 noexcept rules)
The C++17 standard makes throw()
an alias for noexcept
, removes throw(
type-list
)
and throw(...)
, and allows certain types to include noexcept
. This change can cause a number of source compatibility issues in code that conforms to C++14 or earlier. The /Zc:noexceptTypes
option specifies conformance to the C++17 standard. /Zc:noexceptTypes-
allows the C++14 and earlier behavior when code is compiled in C++17 mode.
Syntax
/Zc:noexceptTypes
[-
]
Remarks
When the /Zc:noexceptTypes
option is specified, the compiler conforms to the C++17 standard and treats throw()
as an alias for noexcept
, removes throw(
type-list
)
and throw(...)
, and allows certain types to include noexcept
. The /Zc:noexceptTypes
option is only available when /std:c++17
or later is enabled. /Zc:noexceptTypes
is enabled by default to conform to the ISO C++17 and later standards. The /permissive-
option doesn't affect /Zc:noexceptTypes
. Turn off this option by specifying /Zc:noexceptTypes-
to revert to the C++14 behavior of noexcept
when /std:c++17
or later is specified.
Beginning in Visual Studio 2017 version 15.5, the C++ compiler diagnoses more mismatched exception specifications in declarations in C++17 mode, or when you specify the /permissive-
option.
This sample shows how declarations with an exception specifier behave when the /Zc:noexceptTypes
option is set or disabled. To show the behavior when set, compile by using cl /EHsc /W4 noexceptTypes.cpp
. To show the behavior when disabled, compile by using 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
};
When compiled by using the default setting /Zc:noexceptTypes
, the sample generates the listed warnings. To update your code, use the following instead:
void f() noexcept;
void f() noexcept { }
void g() noexcept(false);
struct A
{
virtual void f() noexcept;
};
struct B : A
{
virtual void f() noexcept { }
};
For more information about conformance issues in Visual C++, see Nonstandard Behavior.
To set this compiler option in the Visual Studio development environment
Open the project's Property Pages dialog box. For details, see Set C++ compiler and build properties in Visual Studio.
Select the Configuration Properties > C/C++ > Command Line property page.
Modify the Additional Options property to include
/Zc:noexceptTypes
or/Zc:noexceptTypes-
and then choose OK.
See also
Feedback
https://aka.ms/ContentUserFeedback.
În curând: Pe parcursul anului 2024, vom elimina treptat Probleme legate de GitHub ca mecanism de feedback pentru conținut și îl vom înlocui cu un nou sistem de feedback. Pentru mai multe informații, consultați:Trimiteți și vizualizați feedback pentru