diff --git a/src/Generator/Options.cs b/src/Generator/Options.cs
index be5213f2..0cc28857 100644
--- a/src/Generator/Options.cs
+++ b/src/Generator/Options.cs
@@ -99,7 +99,7 @@ namespace CppSharp
///
/// true to generate class templates; otherwise, false.
///
- public bool GenerateClassTemplates { get; set; } = false;
+ public bool GenerateClassTemplates { get; set; }
public bool GenerateInternalImports;
public bool GenerateSequentialLayout { get; set; }
public bool UseHeaderDirectories;
diff --git a/src/Generator/Passes/CheckIgnoredDecls.cs b/src/Generator/Passes/CheckIgnoredDecls.cs
index 7de12e78..f8440608 100644
--- a/src/Generator/Passes/CheckIgnoredDecls.cs
+++ b/src/Generator/Passes/CheckIgnoredDecls.cs
@@ -41,10 +41,6 @@ namespace CppSharp.Passes
if (Options.GenerateClassTemplates)
IgnoreUnsupportedTemplates(@class);
- else
- foreach (var specialization in @class.Specializations.Where(
- s => !s.IsExplicitlyGenerated))
- specialization.ExplicitlyIgnore();
return true;
}
@@ -54,6 +50,12 @@ namespace CppSharp.Passes
if (!base.VisitClassTemplateSpecializationDecl(specialization))
return false;
+ if (!Options.GenerateClassTemplates && !specialization.IsExplicitlyGenerated)
+ {
+ specialization.ExplicitlyIgnore();
+ return false;
+ }
+
Declaration decl = null;
if (specialization.Arguments.Any(a =>
a.Type.Type?.TryGetDeclaration(out decl) == true))
diff --git a/tests/NamespacesBase/NamespacesBase.cpp b/tests/NamespacesBase/NamespacesBase.cpp
index d348a8cf..51757f77 100644
--- a/tests/NamespacesBase/NamespacesBase.cpp
+++ b/tests/NamespacesBase/NamespacesBase.cpp
@@ -32,6 +32,10 @@ HasVirtualInCore::HasVirtualInCore()
{
}
+HasVirtualInCore::HasVirtualInCore(TemplateClass t)
+{
+}
+
int HasVirtualInCore::virtualInCore(int parameter)
{
return 1;
diff --git a/tests/NamespacesBase/NamespacesBase.h b/tests/NamespacesBase/NamespacesBase.h
index 84f51a6f..3c495812 100644
--- a/tests/NamespacesBase/NamespacesBase.h
+++ b/tests/NamespacesBase/NamespacesBase.h
@@ -63,6 +63,7 @@ class DLL_API HasVirtualInCore
{
public:
HasVirtualInCore();
+ HasVirtualInCore(TemplateClass t);
virtual int virtualInCore(int parameter);
};