Что делает атрибут Clang 'type_visibility', и когда его следует использовать?

Он используется в libС++ для многих типов шаблонов, таких как tuple_element, tuple и т.д.

Насколько я могу судить, нет публичной документации о том, что он делает, кроме сообщения commit, представляя его, и это unit test в проекте clang.

Ответы

Ответ 1

Этот атрибут позволяет видеть видимость ELF и (предположительно) его неопределенные объекты привязки (vtable, typeinfos) для управления отдельно от видимости функций и данных членов типа.

Это позволяет typeinfos и vtable, например, для явного экземпляра шаблонизированного полиморфного типа, который будет расположен централизованно, не заставляя видимость по умолчанию для типов частных статических данных также экспортировать символы для вещей, к которым никто никогда не будет обращаться через границу библиотеки расточительно время выполнения и пространство таблиц символов при работе с разделяемыми библиотеками.