From f2de736f81473049ee36ef48c7b6227c3a4a5159 Mon Sep 17 00:00:00 2001 From: triton Date: Sat, 10 Jan 2015 19:07:58 +0000 Subject: [PATCH] Fixed cyclic dependency when parsing class templates with friends. Fixes ddobrev/QtSharp#22. Thanks to @golddranks for debugging the problem and the fix. --- src/CppParser/Parser.cpp | 5 ++++- tests/Basic/Basic.h | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index 14ac4468..80e92628 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -960,7 +960,10 @@ ClassTemplate* Parser::WalkClassTemplate(clang::ClassTemplateDecl* TD) CT->_Namespace = NS; NS->Templates.push_back(CT); - CT->TemplatedDecl = WalkRecordCXX(TD->getTemplatedDecl()); + bool Process; + CT->TemplatedDecl = GetRecord(TD->getTemplatedDecl(), Process); + WalkRecordCXX(TD->getTemplatedDecl()); + CT->Parameters = WalkTemplateParameterList(TD->getTemplateParameters()); return CT; diff --git a/tests/Basic/Basic.h b/tests/Basic/Basic.h index 994f6311..0b6ede87 100644 --- a/tests/Basic/Basic.h +++ b/tests/Basic/Basic.h @@ -673,6 +673,18 @@ private: int m; }; +template class FriendTemplate +{ + template + friend FriendTemplate func(const FriendTemplate&); + + friend FriendTemplate; + friend class FriendTemplate; + + template + friend class FriendTemplate; +}; + class DLL_API DifferentConstOverloads { public: