diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java
index 845fdc8316b..485a45f6707 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java
@@ -808,8 +808,8 @@ public class CPPTemplates {
 							return new ProblemBinding(id, IProblemBinding.SEMANTIC_INVALID_TEMPLATE_ARGUMENTS, templateName.toCharArray());
 						}
 						ICPPPartialSpecialization partialSpec= findPartialSpecialization(classTemplate, args);
-						if (isDeclaration || isDefinition) {
-							if (partialSpec == null) {
+						if (partialSpec == null) {
+							if (isDeclaration || isDefinition) {
 								if (template instanceof ICPPClassTemplate) {
 									partialSpec = new CPPClassTemplatePartialSpecialization(id, args);
 									if (template instanceof ICPPInternalClassTemplate) {
@@ -827,9 +827,8 @@ public class CPPTemplates {
 								}
 								return partialSpec;
 							}
-						}
-						if (partialSpec == null)
 							return new ProblemBinding(id, IProblemBinding.SEMANTIC_INVALID_TYPE, templateName.toCharArray());
+						}
 						result= partialSpec;
 					}
 				}