Проверяемые исключения - это та ещё спорная вещь в джаве, не хотелось бы углубляться в это.
у меня просто нет одного корня, куда прилетает всё со всей программы.
Вы своими тремя примерами подтвердили, что исключения - не для нормальных ситуаций.
std::wstring filterMyException(const std::exception& e)
{
if (!dynamic_cast<MyException*>(&e))
return std::wstring();
return loc::get("Error.MyException");
}