Clang 的 'type_visibility' 属性有什么作用,什么时候应该使用它?

What does Clang's 'type_visibility' attribute do, and when should one use it?

它在 libc++ 中用于许多模板类型,例如 tuple_elementtuple

据我所知,除了 clang 项目中的 commit message introducing it and this unit test 之外,没有 public 文档说明它的作用。

此属性允许类型的 ELF visibility 和(大概)其模糊链接对象 (vtable, typeinfos) 与类型的函数和数据成员的可见性分开控制.

这允许 typeinfos 和 vtable 用于,比如说,模板化多态类型的显式实例化位于中心位置,而不强制类型的私有静态数据成员的默认可见性——导出符号在使用共享库时,没有人会真正跨库访问的东西会浪费运行时间和符号 table space。