Bug 538069 - Save non-type template parameter...

... of template template parameter in index.
Fixes false positive "Invalid template arguments".

Change-Id: I82cd9aece8f03142cbdcf5d1058113684c29d6fe
Signed-off-by: Hannes Vogt <hannes@havogt.de>
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java
index 1011404..987cef0 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java
@@ -2223,6 +2223,18 @@
 		checkBindings();
 	}
 
+	//	template <template <int... T1> class TT>
+	//	struct my_template {
+	//	};
+
+	//	template<int...>
+	//	struct my_type{};
+	//
+	//	using foo = my_template<my_type>;
+	public void testTemplateTemplateNonTypeParameterPack_bug538069() throws Exception {
+		checkBindings();
+	}
+
 	// template<typename T>
 	// struct S {
 	//     T t;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTemplateParameter.java
index aeacb1e..7abccb7 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTemplateParameter.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTemplateParameter.java
@@ -43,6 +43,7 @@
 import org.eclipse.cdt.internal.core.pdom.db.PDOMNodeLinkedList;
 import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage;
 import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
+import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkage.ConfigureTemplateParameters;
 import org.eclipse.core.runtime.CoreException;
 
 /**
@@ -76,6 +77,7 @@
 		db.putInt(record + PARAMETERID, id);
 		final ICPPTemplateParameter[] origParams= param.getTemplateParameters();
 		final IPDOMCPPTemplateParameter[] params = PDOMTemplateParameterArray.createPDOMTemplateParameters(linkage, this, origParams);
+		((PDOMCPPLinkage)linkage).new ConfigureTemplateParameters(origParams, params);
 		long rec= PDOMTemplateParameterArray.putArray(db, params);
 		getDB().putRecPtr(record + PARAMETERS, rec);
 	}
@@ -220,6 +222,7 @@
 			IPDOMCPPTemplateParameter[] oldParams= getTemplateParameters();
 			try {
 				params= PDOMTemplateParameterArray.createPDOMTemplateParameters(getLinkage(), this, ttp.getTemplateParameters());
+				((PDOMCPPLinkage)linkage).new ConfigureTemplateParameters(ttp.getTemplateParameters(), params);
 				long newRec= PDOMTemplateParameterArray.putArray(db, params);
 				db.putRecPtr(record + PARAMETERS, newRec);
 				if (oldRec != 0)