Skip to content

Commit 84f145b

Browse files
committed
Fixed the generated C# when a function uses an external specialisation.
Signed-off-by: Dimitar Dobrev <[email protected]>
1 parent fbd76ad commit 84f145b

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

src/Generator/Passes/TrimSpecializationsPass.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,15 @@ private void AddSpecialization(ClassTemplateSpecialization specialization)
9797
private void CleanSpecializations(Class template)
9898
{
9999
template.Specializations.RemoveAll(s =>
100-
s.SpecializationKind == TemplateSpecializationKind.Undeclared ||
101-
(!specializations.Contains(s) && !internalSpecializations.Contains(s)));
100+
{
101+
if (s.SpecializationKind == TemplateSpecializationKind.Undeclared ||
102+
(!specializations.Contains(s) && !internalSpecializations.Contains(s)))
103+
{
104+
s.ExplicitlyIgnore();
105+
return true;
106+
}
107+
return false;
108+
});
102109

103110
foreach (var specialization in template.Specializations.Where(
104111
s => s is ClassTemplatePartialSpecialization))

tests/NamespacesDerived/NamespacesDerived.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ DerivedFromExternalSpecialization::~DerivedFromExternalSpecialization()
7070
{
7171
}
7272

73+
TemplateWithIndependentFields<Base3> DerivedFromExternalSpecialization::returnExternalSpecialization()
74+
{
75+
return TemplateWithIndependentFields<Base3>();
76+
}
77+
7378
HasVirtualInDependency::HasVirtualInDependency()
7479
{
7580
}

tests/NamespacesDerived/NamespacesDerived.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ class DLL_API DerivedFromExternalSpecialization : public TemplateWithIndependent
7676
public:
7777
DerivedFromExternalSpecialization();
7878
~DerivedFromExternalSpecialization();
79+
TemplateWithIndependentFields<Base3> returnExternalSpecialization();
7980
};
8081

8182
class DLL_API DerivedFromSecondaryBaseInDependency : public Derived, public SecondaryBase

0 commit comments

Comments
 (0)