Я читаю Itanium ABI, в котором говорится, что
Предполагается, что два указателя type_info указывают на эквивалентные описания типов тогда и только тогда, когда указатели равны. Реализация должна удовлетворять этому ограничению, например. с использованием вытеснения символов, разделов COMDAT или других механизмов.
Кто-нибудь знает кровавые подробности о том, как это достигается на практике на популярных платформах, таких как, скажем, Linux с использованием GCC и GNU binutils, при использовании динамически загружаемых библиотек? Насколько это надежно?
Кроме того, у меня сложилось впечатление, что сравнения typeid
в MSVC реализованы (были?) с использованием сравнений строк во время выполнения для искаженных имен символов именно потому, что это требование не может быть гарантировано выполнено. Это все еще так, как это делается? И существуют ли технические ограничения платформы, которые не позволяют MSVC использовать ту же технику, которая используется на платформах Itanium ABI?
EDIT Еще один вопрос: перехват исключений через границы модуля (в любом ABI) также зависит от информации RTTI, или есть другой механизм, помимо эквивалента среды выполнения dynamic_cast
s?