Мда. Что-то меня последнее время начало утомлять это наследие прошлого (про до-стандартные времена).
Пока пишешь один отдельно взятый проект - нет проблем.
Как начинаешь что-то интегрировать - грабли граблями.
Вот ведь должны
std::__non_rtti_object
std::bad_typeid
std::exception
находиться в пространстве имен std...
Так ведь нет, std::exception даже в заголовках psdk объявлен глобальным + импорт в std через using
bad_typeid и __non_rtti_object - объявлены сразу в std
А между тем, от вида объявления зависит typeid().raw_name(), а от последнего - возможность поймать это исключение в блоке catch.
Несовместимо объявил - все, не поймал.
В итоге, msvcrt (гад) бросает ::__non_rtti_object, а поймать его нереально - typeid не совпадают, ибо ловим std::__non_rtti_object
И объявить свой глобальный __non_rtti_object - тоже нереально, ибо какая-то добрая душа вставила в глобальный же заголовок строчку
using namespace std;
using namespace не должно появляться в заголовках, тем более глобальных.
даже using namespace std.
P.S.
Крик души получился
Но реально напрягает то, что прежде чем поймать какое-то исключение crt приходится долго думать, как оно объявлено в проекте, и как оно объявлено в crt.
И как оно будет портироваться, если что.
P.P.S.
И самое смешное - в vs6 также точно объялено __non_rtti_object и bad_typeid в std.
Где crt глобальные-то объекты берет?