-1
#include <iostream>
#include <sstream>

using std::string;
using std::cout;
using std::endl;
using std::ostringstream;

class illegalParameterValue {

private:
    string message;
public:
    illegalParameterValue() : message("Illegal parameter value") {}
    explicit illegalParameterValue(const char* theMessage) {message = theMessage;}
    void outputMessage() {cout << message << endl;}

};

int main() {

    ostringstream s;
    s << "index = " << 1 << " size = " << 2;
    throw illegalParameterValue(s.str().c_str());

    return 0;
}

I just use some code like this, but the throw will remind some warnings which called

Clang-Tidy: Throwing an exception whose type 'illegalParameterValue' is not derived from 'std::exception'

How can I solve this problem?

Evg
  • 25,259
  • 5
  • 41
  • 83
ZCdream
  • 11
  • 4

1 Answers1

2

consider the following code:

try {
  // do something that might throw an exception
}
catch (const std::exception &ex) {
  // handle the exception
}

If you derive your illegalParameterValue class from std::exception, then the catch clause above will catch it (along with other kinds of exceptions derived from std::exception). As currently written, it will not. Your users will have to add another catch clause:

try {
  // do something that might throw an exception
}
catch (const std::exception &ex) {
  // handle std exceptions
}
catch (const illegalParameterValue &ip) {
  // handle illegal parameter exeception
}

Maybe that's what you want, maybe not. But there's a lot of code out there like the first case.

Marshall Clow
  • 15,972
  • 2
  • 29
  • 45