diff --git a/src/AST/CppTypePrinter.cs b/src/AST/CppTypePrinter.cs index 05299706..26da4ec3 100644 --- a/src/AST/CppTypePrinter.cs +++ b/src/AST/CppTypePrinter.cs @@ -92,11 +92,10 @@ namespace CppSharp.AST return string.Format("{0} (*)({1})", returnType.Visit(this), args); } - var qual = PrintTypeQualifiers && - pointer.GetFinalQualifiedPointee().Qualifiers.IsConst ? "const " : string.Empty; - var pointeeType = pointee.Visit(this, quals); + var qual = PrintTypeQualifiers && quals.IsConst ? " const" : string.Empty; + var pointeeType = pointee.Visit(this, pointer.QualifiedPointee.Qualifiers); var mod = PrintTypeModifiers ? ConvertModifierToString(pointer.Modifier) : string.Empty; - return string.Format("{0}{1}{2}", qual, pointeeType, mod); + return string.Format("{0}{1}{2}", pointeeType, mod, qual); } public virtual string VisitMemberPointerType(MemberPointerType member, TypeQualifiers quals) @@ -106,7 +105,8 @@ namespace CppSharp.AST public virtual string VisitBuiltinType(BuiltinType builtin, TypeQualifiers quals) { - return VisitPrimitiveType(builtin.Type); + var qual = PrintTypeQualifiers && quals.IsConst ? "const " : string.Empty; + return string.Format("{0}{1}", qual, VisitPrimitiveType(builtin.Type)); } public virtual string VisitPrimitiveType(PrimitiveType primitive) diff --git a/src/Generator.Tests/AST/TestAST.cs b/src/Generator.Tests/AST/TestAST.cs index d4e129d9..f49819f8 100644 --- a/src/Generator.Tests/AST/TestAST.cs +++ b/src/Generator.Tests/AST/TestAST.cs @@ -409,6 +409,18 @@ namespace CppSharp.Generator.Tests.AST Is.Not.EqualTo(template.Specializations[1].Constructors.First().QualifiedName)); } + [Test] + public void TestPrintingConstPointerWithConstType() + { + var template = AstContext.FindDecl("TestSpecializationArguments").First(); + var cppTypePrinter = new CppTypePrinter { PrintScopeKind = CppTypePrintScopeKind.Qualified }; + var builtin = new BuiltinType(PrimitiveType.Char); + var pointee = new QualifiedType(builtin, new TypeQualifiers { IsConst = true }); + var pointer = new QualifiedType(new PointerType(pointee), new TypeQualifiers { IsConst = true }); + var type = pointer.Visit(cppTypePrinter); + Assert.AreEqual(type, "const char* const"); + } + [Test] public void TestPrintingSpecializationWithConstValue() {