From bc06a0d61501db1e60bc106f82af463833a933fa Mon Sep 17 00:00:00 2001 From: Deadlocklogic Date: Tue, 2 Jan 2024 17:29:53 +0200 Subject: [PATCH] Parser.cpp: implement CXXDeductionGuide --- src/CppParser/Parser.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index 04bae6c9..ce8de65e 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -1622,6 +1622,10 @@ FunctionTemplate* Parser::WalkFunctionTemplate(const clang::FunctionTemplateDecl using namespace clang; + auto TemplatedDecl = TD->getTemplatedDecl(); + if (dyn_cast(TemplatedDecl)) + return nullptr; + auto NS = GetNamespace(TD); assert(NS && "Expected a valid namespace"); @@ -1631,7 +1635,6 @@ FunctionTemplate* Parser::WalkFunctionTemplate(const clang::FunctionTemplateDecl return FT; CppSharp::CppParser::AST::Function* F = nullptr; - auto TemplatedDecl = TD->getTemplatedDecl(); if (auto MD = dyn_cast(TemplatedDecl)) F = WalkMethodCXX(MD); @@ -2929,6 +2932,15 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL, Ty = WalkType(MT->getUnderlyingType(), TL); break; } + case clang::Type::DeducedTemplateSpecialization: + { + auto DTS = Type->getAs(); + if (DTS->isSugared()) + Ty = WalkType(DTS->getCanonicalTypeInternal()); + else + return nullptr; + break; + } default: { Debug("Unhandled type class '%s'\n", Type->getTypeClassName()); @@ -4276,6 +4288,7 @@ Declaration* Parser::WalkDeclaration(const clang::Decl* D) case Decl::IndirectField: case Decl::StaticAssert: case Decl::NamespaceAlias: + case Decl::CXXDeductionGuide: break; default: {