Criando exceções personalizadas em C ++

Estou aprendendo C ++ e estou experimentando quando tento criar minha própria exceção e lançá-las no Linux.

Eu criei um pequeno projeto de teste para testar minha implementação e abaixo está o meu arquivo de cabeçalho da classe de exceção.

class TestClass : public std::runtime_error
{
public:
    TestClass(char const* const message) throw();
    virtual char const* what() const throw();
};

O arquivo de origem para a classe de exceção é

using namespace std;

TestClass::TestClass(char const* const message) throw()
    : std::runtime_error(message)
{

}

char const * TestClass::what() const throw()
{
    return exception::what();
}

No meu aplicativo principal, estou chamando uma função que lança minha exceção e a captura em uma tentativa / captura da seguinte maneira:

void runAFunctionAndthrow();

/*
 * 
 */
int main(int argc, char** argv) {
    try
    {
        cout << "About to call function" << endl;
        runAFunctionAndthrow();
    }
    catch (TestClass ex)
    {
        cout << "Exception Caught: " << ex.what() << endl;
    }

    return 0;
}

void runAFunctionAndthrow()
{
    cout << "going to run now. oh dear I need to throw an exception" << endl;

    stringstream logstream;
    logstream << "This is my exception error. :(";
    throw TestClass(logstream.str().c_str());
}

Quando executo, espero obter a seguinte saída:

Sobre a chamada da função

Vai correr agora. oh querida eu preciso lançar uma exceção

Exceção detectada: Este é o meu erro de exceção. :(

Em vez disso, o que estou recebendo é

Sobre a chamada da função

vai correr agora. oh querida eu preciso lançar uma exceção

Exceção detectada: std :: exception

Observe a última linha que diz std :: exception em vez da minha mensagem de exceção real "This is my exception error".

Por que isso funciona bem no Windows, mas no Linux faz isso.

Pelo que eu vi em várias postagens, o que eu fiz está correto, então o que estou perdendo?

questionAnswers(3)

yourAnswerToTheQuestion