https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110000
Florian Weimer <fw at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |fw at gcc dot gnu.org --- Comment #5 from Florian Weimer <fw at gcc dot gnu.org> --- How hard is this to use in practice? With current Clang, this: “ template <class T> class S { __attribute__ ((visibility ("hidden"), exclude_from_explicit_instantiation)) int f1 (); int f2 (); }; template <class T> int S<T>::f1 () { return 1; } template <class T> int S<T>::f2 () { return f1 (); } template class S<int>; ” still inlines S<int>::f1 into S<int>::f2. This may not threaten future evolution of the implementation in this particular case, but it would certainly be helpful to have some guides similar to <https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C%2B%2B>. Clang's attribute documentation describes what happens, but it doesn't comment on the actual implications for ABI compatibility.