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); };