diff --git a/src/Generator/Passes/TrimSpecializationsPass.cs b/src/Generator/Passes/TrimSpecializationsPass.cs index a7f46c39..9e3929f2 100644 --- a/src/Generator/Passes/TrimSpecializationsPass.cs +++ b/src/Generator/Passes/TrimSpecializationsPass.cs @@ -97,8 +97,15 @@ namespace CppSharp.Passes private void CleanSpecializations(Class template) { template.Specializations.RemoveAll(s => - s.SpecializationKind == TemplateSpecializationKind.Undeclared || - (!specializations.Contains(s) && !internalSpecializations.Contains(s))); + { + if (s.SpecializationKind == TemplateSpecializationKind.Undeclared || + (!specializations.Contains(s) && !internalSpecializations.Contains(s))) + { + s.ExplicitlyIgnore(); + return true; + } + return false; + }); foreach (var specialization in template.Specializations.Where( s => s is ClassTemplatePartialSpecialization)) diff --git a/tests/NamespacesDerived/NamespacesDerived.cpp b/tests/NamespacesDerived/NamespacesDerived.cpp index e5ad74e8..19d759a2 100644 --- a/tests/NamespacesDerived/NamespacesDerived.cpp +++ b/tests/NamespacesDerived/NamespacesDerived.cpp @@ -70,6 +70,11 @@ DerivedFromExternalSpecialization::~DerivedFromExternalSpecialization() { } +TemplateWithIndependentFields DerivedFromExternalSpecialization::returnExternalSpecialization() +{ + return TemplateWithIndependentFields(); +} + HasVirtualInDependency::HasVirtualInDependency() { } diff --git a/tests/NamespacesDerived/NamespacesDerived.h b/tests/NamespacesDerived/NamespacesDerived.h index 2d70943e..862acd12 100644 --- a/tests/NamespacesDerived/NamespacesDerived.h +++ b/tests/NamespacesDerived/NamespacesDerived.h @@ -76,6 +76,7 @@ class DLL_API DerivedFromExternalSpecialization : public TemplateWithIndependent public: DerivedFromExternalSpecialization(); ~DerivedFromExternalSpecialization(); + TemplateWithIndependentFields returnExternalSpecialization(); }; class DLL_API DerivedFromSecondaryBaseInDependency : public Derived, public SecondaryBase