Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A função é declarada
noexcept, mas chama a função function_name, que pode gerar exceções (f.6).
Diretrizes Principais do C++:
F.6: Se a sua função não deve lançar exceção, declare-a noexcept.
Comentários
Esta regra altera outra regra, C26440 DECLARE_NOEXCEPT, que tenta encontrar funções que são boas candidatas para serem marcadas como noexcept. Nesse caso, a ideia é que, depois de marcar alguma função como noexcept, ela precisa manter o próprio contrato, não invocando outro código que possa gerar exceções.
- O compilador do Microsoft C++ já lida com violações simples, como
throwinstruções no corpo da função (confira C4297). - A regra se concentra apenas em chamadas de função. Ele sinaliza destinos que não são
constexpre que podem potencialmente gerar exceções. Em outras palavras, eles não são marcados explicitamente como não geradores usandonoexcept,__declspec(nothrow)ou throw(). - As funções de destino geradas pelo compilador são ignoradas para reduzir o ruído, pois as especificações de exceção nem sempre são fornecidas pelo compilador.
- O verificador também ignora tipos especiais de funções de destino que esperamos implementar como
noexcept; essa regra é imposta por C26439 SPECIAL_NOEXCEPT.
Exemplo
#include <vector>
#include <string>
#include <istream>
std::vector<std::string> collect(std::istream& is) noexcept
{
std::vector<std::string> res;
for (std::string s; is >> s;) // C26447, `operator bool()` can throw, std::string's allocator can throw
res.push_back(s); // C26447, `push_back` can throw
return res;
}
Você pode corrigir esses avisos removendo noexcept da assinatura da função.