странно - sql :: SQLException mysql не перехватывается его типом, но перехватывается как std :: exception и успешно откатывается

Я использую MySQL C ++ соединитель с этим (немного упрощенным) кодом.

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() );
}

Предполагается, что соединитель генерирует исключение sql :: SQLException, которое происходит от std :: exception и имеет несколько дополнительных методов, таких какgetErrorCode().

Исключение выдается во второмcatch блок, но можно привести к (и использовать как)sql::SQLException успешно.

Еще более странным является то, что похожий код в другом исполняемом файле ловитsql::SQLException как и ожидалось. Разница между ними заключается в том, что первый находится в общем объекте (.so), который загруженdlopen().

RHEL 5.7 32 бит, gcc 4.1.2

Ответы на вопрос(1)

Ваш ответ на вопрос