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 function is declared
noexcept
but calls function function_name that may throw exceptions (f.6).
C++ Core Guidelines:
F.6: If your function may not throw, declare it noexcept.
Remarks
This rule amends another rule, C26440 DECLARE_NOEXCEPT, which tries to find functions that are good candidates to mark as noexcept
. In this case, the idea is that once you mark some function as noexcept
, it must keep its contract by not invoking other code that may throw exceptions.
- The Microsoft C++ compiler already handles straightforward violations like
throw
statements in the function body (see C4297). - The rule focuses only on function calls. It flags targets that aren't
constexpr
and that can potentially throw exceptions. In other words, they aren't marked explicitly as non-throwing by usingnoexcept
,__declspec(nothrow)
, or throw(). - The compiler-generated target functions are skipped to reduce noise since exception specifications aren't always provided by the compiler.
- The checker also skips special kinds of target functions we expect you to implement as
noexcept
; this rule is enforced by C26439 SPECIAL_NOEXCEPT.
Example
#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;
}
You can fix these warnings by removing noexcept
from the function signature.