Aviso do compilador (nível 1) C4297
'function': a função não deveria gerar uma exceção, mas gera
Uma declaração de função contém um especificador noexcept
(possivelmente implícito), um especificador de exceção vazio throw
ou um atributo __declspec(nothrow), e a definição contém uma ou mais instruções throw. Para resolver o C4297, não tente lançar exceções em funções declaradas __declspec(nothrow)
, noexcept(true)
ou throw()
. Como alternativa, remova a especificação noexcept
, throw()
ou __declspec(nothrow)
.
Por padrão, o compilador gera especificadores implícitos noexcept(true)
para destruidores definidos pelo usuário e funções de desalocador e funções de membro especiais geradas pelo compilador. Isso está em conformidade com o padrão ISO C++11. Para evitar a geração de especificadores de noexcept implícitos e reverter o compilador para o comportamento não padrão do Visual Studio 2013, use a opção do compilador /Zc:implicitNoexcept. Para obter mais informações, consulte /Zc:implicitNoexcept (Especificadores de exceção implícita).
Para obter mais informações sobre as especificações de exceção, confira Especificações de exceção (throw). Além disso, consulte /EH (Modelo de tratamento de exceções) para obter informações sobre como modificar o comportamento de tratamento de exceções no tempo de compilação.
Esse aviso também é gerado para funções __declspec(dllexport) marcadas como "C" extern, mesmo que sejam funções C++.
O seguinte exemplo gera o erro C4297:
// C4297.cpp
// compile with: /W1 /LD
void __declspec(nothrow) f1() // declared nothrow
// try the following line instead
// void f1()
{
throw 1; // C4297
}