### EnTT and shared libraries To make sure that an application and a shared library that use both `EnTT` can interact correctly when symbols are hidden by default, there are some tricks to follow.
In particular and in order to avoid undefined behaviors, all the instantiation of the `family` class template shall be made explicit along with the system-wide specifier to use to export them. At the time I'm writing this document, the classes that use internally the above mentioned class template are `dispatcher`, `emitter` and `registry`. Therefore and as an example, if you use the `registry` class template in your shared library and want to set symbols visibility to _hidden_ by default, the following lines are required to allow it to function properly with a client that also uses the `registry` somehow: * On GNU/Linux: ```cpp namespace entt { template class __attribute__((visibility("default"))) family; template class __attribute__((visibility("default"))) family; } ``` * On Windows: ```cpp namespace entt { template class __declspec(dllexport) family; template class __declspec(dllexport) family; } ``` Otherwise, the risk is that type identifiers are different between the shared library and the application and this will prevent the whole thing from functioning correctly for obvious reasons.