From 730fe0d4078c7ddf6011842d1b0757a01145aef8 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Sun, 11 Sep 2016 01:16:31 +0300 Subject: [PATCH] Changed partial template specialisations with all arguments pointers not to be trimmed away. Signed-off-by: Dimitar Dobrev --- src/Generator/Passes/TrimSpecializationsPass.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Generator/Passes/TrimSpecializationsPass.cs b/src/Generator/Passes/TrimSpecializationsPass.cs index 3f50ac64..34adf5eb 100644 --- a/src/Generator/Passes/TrimSpecializationsPass.cs +++ b/src/Generator/Passes/TrimSpecializationsPass.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using CppSharp.AST; using CppSharp.AST.Extensions; @@ -17,9 +18,9 @@ namespace CppSharp.Passes if (@class.Specializations.Count == 0) return false; + Func allPointers = a => a.Type.Type != null && a.Type.Type.IsAddress(); var groups = (from specialization in @class.Specializations - group specialization by specialization.Arguments.All( - a => a.Type.Type != null && a.Type.Type.IsAddress()) into @group + group specialization by specialization.Arguments.All(allPointers) into @group select @group).ToList(); foreach (var group in groups.Where(g => g.Key)) @@ -27,7 +28,8 @@ namespace CppSharp.Passes @class.Specializations.Remove(specialization); for (int i = @class.Specializations.Count - 1; i >= 0; i--) - if (@class.Specializations[i] is ClassTemplatePartialSpecialization) + if (@class.Specializations[i] is ClassTemplatePartialSpecialization && + !@class.Specializations[i].Arguments.All(allPointers)) @class.Specializations.RemoveAt(i); return true;