https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120499
--- Comment #2 from Nathaniel Shead <nshead at gcc dot gnu.org> --- The issue appears to be some confusion over which TU is reponsible for instantiating the destructor of the existing specialisation 'vector<int>': the main file thinks that it's already been instantiated because it's a complete type, but nothing in Coll or std uses the destructor explicitly so it ends up never getting emitted. Adding a user-provided destructor to 'Coll' can workaround the issue until this gets fixed, as in: export class Coll { std::vector<int> vals; public: ~Coll() {} };