Except when specifying default visibility,
this attribute is intended for use with declarations that would
otherwise have external linkage.
You can apply this attribute to functions and variables in
C and C++. In C++, it can also be applied to class, struct, union,
and enum types, and namespace declarations.