diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp
index 60a11d92..090f1f57 100644
--- a/src/CppParser/Parser.cpp
+++ b/src/CppParser/Parser.cpp
@@ -1148,7 +1148,8 @@ ClassTemplate* Parser::WalkClassTemplate(const clang::ClassTemplateDecl* TD)
return CT;
CT = new ClassTemplate();
- if (TD != TD->getCanonicalDecl())
+ if (!TD->isThisDeclarationADefinition() &&
+ TD->getCanonicalDecl()->isThisDeclarationADefinition())
{
CT->IsIncomplete = true;
CT->CompleteDeclaration = WalkClassTemplate(TD->getCanonicalDecl());
@@ -1373,7 +1374,8 @@ FunctionTemplate* Parser::WalkFunctionTemplate(const clang::FunctionTemplateDecl
/*AddToNamespace=*/false);
FT = new FunctionTemplate();
- if (TD != TD->getCanonicalDecl())
+ if (!TD->isThisDeclarationADefinition() &&
+ TD->getCanonicalDecl()->isThisDeclarationADefinition())
{
FT->IsIncomplete = true;
FT->CompleteDeclaration = WalkFunctionTemplate(TD->getCanonicalDecl());
diff --git a/src/Generator.Tests/AST/TestAST.cs b/src/Generator.Tests/AST/TestAST.cs
index 5a6e9ca3..620409c2 100644
--- a/src/Generator.Tests/AST/TestAST.cs
+++ b/src/Generator.Tests/AST/TestAST.cs
@@ -367,5 +367,13 @@ namespace CppSharp.Generator.Tests.AST
/// no string for this control key.
/// ".Replace("\r", string.Empty), commentMethod.Replace("\r", string.Empty));
}
+
+ [Test]
+ public void TestCompletionOfClassTemplates()
+ {
+ var templates = AstContext.FindDecl("ForwardedTemplate").ToList();
+ Assert.IsFalse(templates.Single(
+ t => t.DebugText == "template \r\nclass ForwardedTemplate\r\n{\r\n}").IsIncomplete);
+ }
}
}
diff --git a/tests/Native/AST.h b/tests/Native/AST.h
index e7b872b4..8ede7e8c 100644
--- a/tests/Native/AST.h
+++ b/tests/Native/AST.h
@@ -148,3 +148,9 @@ public:
//----------------------------------------------------------------------
const char * GetIOHandlerControlSequence(char ch);
};
+
+template
+class ForwardedTemplate;
+
+typedef ForwardedTemplate i;
+typedef ForwardedTemplate l;
diff --git a/tests/Native/ASTExtensions.h b/tests/Native/ASTExtensions.h
index 3182addd..f616d3ff 100644
--- a/tests/Native/ASTExtensions.h
+++ b/tests/Native/ASTExtensions.h
@@ -6,4 +6,9 @@
template class TestTemplateClass;
// Implicit instantiations
typedef TestTemplateClass TestTemplateClassComplex;
-typedef TestTemplateClass> TestTemplateClassMoreComplex;
\ No newline at end of file
+typedef TestTemplateClass> TestTemplateClassMoreComplex;
+
+template
+class ForwardedTemplate
+{
+};