Browse Source

Fixed incorrectly generated bindings for class with non-type template arguments

Fixes #979
pull/982/head
Marco Zille 9 years ago committed by João Matos
parent
commit
d932a09cdf
  1. 5
      src/Generator/Passes/CheckIgnoredDecls.cs
  2. 10
      tests/CSharp/CSharpTemplates.h

5
src/Generator/Passes/CheckIgnoredDecls.cs

@ -490,6 +490,10 @@ namespace CppSharp.Passes
private void IgnoreUnsupportedTemplates(Class @class) private void IgnoreUnsupportedTemplates(Class @class)
{ {
if (@class.TemplateParameters.Any(param => param is NonTypeTemplateParameter))
foreach (var specialization in @class.Specializations)
specialization.ExplicitlyIgnore();
if (!Options.IsCLIGenerator && !@class.TranslationUnit.IsSystemHeader && if (!Options.IsCLIGenerator && !@class.TranslationUnit.IsSystemHeader &&
@class.Specializations.Count > 0) @class.Specializations.Count > 0)
return; return;
@ -500,6 +504,7 @@ namespace CppSharp.Passes
hasExplicitlyGeneratedSpecializations = true; hasExplicitlyGeneratedSpecializations = true;
else else
specialization.ExplicitlyIgnore(); specialization.ExplicitlyIgnore();
if (!hasExplicitlyGeneratedSpecializations) if (!hasExplicitlyGeneratedSpecializations)
@class.ExplicitlyIgnore(); @class.ExplicitlyIgnore();
} }

10
tests/CSharp/CSharpTemplates.h

@ -521,3 +521,13 @@ protected:
class ForwardTemplateFriendClassUser : public ForwardTemplateFriendClass<ForwardTemplateFriendClassUser> class ForwardTemplateFriendClassUser : public ForwardTemplateFriendClass<ForwardTemplateFriendClassUser>
{ }; { };
template<int I>
class ClassWithNonTypeTemplateArgument
{
public:
ClassWithNonTypeTemplateArgument() { }
};
class SpecializationOfClassWithNonTypeTemplateArgument : public ClassWithNonTypeTemplateArgument<0>
{ };
Loading…
Cancel
Save