estranho - sql :: SQLException do mysql não é pego pelo seu tipo, mas é pego como std :: exception e retorna com sucesso

Eu estou usando o conector mysql c ++ com este código (um pouco simplificado).

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

O conector deve lançar o sql :: SQLException que deriva de std :: exception e tem alguns métodos adicionais comogetErrorCode().

A exceção lançada é capturada no segundocatch bloco, mas pode ser convertido para (e usado como)sql::SQLException com sucesso.

Ainda mais estranho é que um código semelhante em um arquivo executável diferente detectasql::SQLException como esperado. A diferença entre eles é que o primeiro está em um objeto compartilhado (.so) carregado comdlopen().

RHEL 5,7 32 bit, gcc 4.1.2

questionAnswers(1)

yourAnswerToTheQuestion