From ed2e45f609ec1435ef6e4127b8511a9b311b28bb Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Sat, 11 Jan 2020 22:54:25 +0200 Subject: [PATCH] Don't export symbols for explicit specializations Signed-off-by: Dimitar Dobrev --- src/Generator/Passes/GenerateSymbolsPass.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Generator/Passes/GenerateSymbolsPass.cs b/src/Generator/Passes/GenerateSymbolsPass.cs index cf75adcc..c2b4499b 100644 --- a/src/Generator/Passes/GenerateSymbolsPass.cs +++ b/src/Generator/Passes/GenerateSymbolsPass.cs @@ -116,18 +116,21 @@ namespace CppSharp.Passes { var mangled = function.Mangled; var method = function as Method; - bool isInspecialization; + bool isInImplicitSpecialization; var declarationContext = function.Namespace; do { - isInspecialization = declarationContext is ClassTemplateSpecialization; + isInImplicitSpecialization = + declarationContext is ClassTemplateSpecialization specialization && + specialization.SpecializationKind != + TemplateSpecializationKind.ExplicitSpecialization; declarationContext = declarationContext.Namespace; - } while (!isInspecialization && declarationContext != null); + } while (!isInImplicitSpecialization && declarationContext != null); return function.IsGenerated && !function.IsDeleted && !function.IsDependent && !function.IsPure && function.Namespace.IsGenerated && (!string.IsNullOrEmpty(function.Body) || - isInspecialization || function.IsImplicit) && + isInImplicitSpecialization || function.IsImplicit) && // we don't need symbols for virtual functions anyway (method == null || (!method.IsVirtual && !method.IsSynthetized && (!method.IsConstructor || !((Class) method.Namespace).IsAbstract))) &&