Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The latest version of this topic can be found at Compiler Warning (level 1) C4297.
function' : function assumed not to throw an exception but does
A function declaration contains a (possibly implicit) noexcept specifier, an empty throw exception specifier, or a __declspec(nothrow) attribute, and the definition contains one or more throw statements. To resolve C4297, do not attempt to throw exceptions in functions that are declared __declspec(nothrow), noexcept(true) or throw(). Alternatively, remove the noexcept, throw(), or __declspec(nothrow) specification.
By default, the compiler generates implicit noexcept(true) specifiers for user-defined destructors and deallocator functions and compiler-generated special member functions. This conforms to the ISO C++11 standard. To prevent generation of implicit noexcept specifiers and revert the compiler to the non-standard behavior of Visual Studio 2013, use the /Zc:implicitNoexcept- compiler option. For more information, see /Zc:implicitNoexcept (Implicit Exception Specifiers).
For more information on exception specifications, see Exception Specifications (throw). Also, see /EH (Exception Handling Model) for information on how to modify exception handling behavior at compile time.
This warning is also generated for __declspec(dllexport) functions marked extern "C", even if they are C++ functions.
The following sample generates C4297:
// C4297.cpp
// compile with: /W1 /LD
void __declspec(nothrow) f1() // declared nothrow
// try the following line instead
// void f1()
{
throw 1; // C4297
}