weird - sql :: SQLException mysql nie jest przechwytywany przez jego typ, ale jest przechwytywany jako std :: wyjątek i pomyślnie odrzucany

Używam złącza mysql c ++ z tym (nieco uproszczonym) kodem.

try
{
    statement->setString(1, word);
    statement->executeUpdate();
}
catch( sql::SQLException& e )
{
    // I don't get here
    return sqlerrno_to_error_code( e.getErrorCode() );
}
catch( std::exception& e )
{
    // I do get here and the cast works
    sql::SQLException& sqle = (sql::SQLException&) e;
    return sqlerrno_to_error_code( sqle.getErrorCode() );
}

Łącznik powinien rzucić sql :: SQLException, który pochodzi od std :: exception i ma kilka dodatkowych metod, takich jakgetErrorCode().

Wyrzucony wyjątek zostaje złapany w drugimcatch blok, ale można go obsadzić (i użyć jako)sql::SQLException z powodzeniem.

Jeszcze bardziej dziwne jest to, że podobny kod w innych plikach wykonywalnychsql::SQLException zgodnie z oczekiwaniami. Różnica między nimi polega na tym, że pierwszy znajduje się we współdzielonym obiekcie (.so), który jest załadowanydlopen().

RHEL 5.7 32-bitowy, gcc 4.1.2

questionAnswers(1)

yourAnswerToTheQuestion