The analyzer has detected that an exception object is created without an explanatory message. It may lead to insufficient logging and hinder error detection.
The example:
void DoSomething(const char *val) { if (!val) throw std::runtime_error { "" }; // something happens here... } void foo() { const char *val = ....; try { DoSomething(val); } catch(std::runtime_error &err) { std::cerr << err.what() << std::endl; } }
The 'DoSomething' function throws an 'std::runtime_error' exception, which is handled in the 'foo' function. During handling, it is expected that 'std::cerr' contains data about the exception cause. Instead, 'std::cerr' outputs an empty string, thus complicating error detection.
The fixed code:
void DoSomething(const char *val) { if (!val) { throw std::runtime_error{ "[DoSomething]: " "the poiner 'val' is nullptr." }; } // something happens here... }
If the analyzer detects the standard exception without the explanatory message, it will issue the V1116 warning. To address such issues with user-defined exceptions, you can use the user annotation mechanism.
This diagnostic is classified as: