diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateNonTypeParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateNonTypeParameter.java index ebc6e231ecf..3482ce4a0dc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateNonTypeParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateNonTypeParameter.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2008 IBM Corporation and others. + * Copyright (c) 2005, 2009 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -63,7 +63,7 @@ public class CPPTemplateNonTypeParameter extends CPPTemplateParameter implements return null; IValue val= Value.create(d, Value.MAX_RECURSION_DEPTH); - IType t= CPPVisitor.createType(d); + IType t= getType(); return new CPPTemplateArgument(val, t); } 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 03c4685eb2e..c4e4ad1baa1 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 @@ -930,11 +930,13 @@ public class CPPTemplates { private static ICPPTemplateArgument instantiateArgument(ICPPTemplateArgument arg, ICPPTemplateParameterMap tpMap, ICPPClassSpecialization within) { if (arg.isNonTypeValue()) { - final IValue orig= arg.getNonTypeValue(); - final IValue inst= instantiateValue(orig, tpMap, within, Value.MAX_RECURSION_DEPTH); - if (orig == inst) + final IValue origValue= arg.getNonTypeValue(); + final IType origType= arg.getTypeOfNonTypeValue(); + final IValue instValue= instantiateValue(origValue, tpMap, within, Value.MAX_RECURSION_DEPTH); + final IType instType= instantiateType(origType, tpMap, within); + if (origType == instType && origValue == instValue) return arg; - return new CPPTemplateArgument(inst, arg.getTypeOfNonTypeValue()); + return new CPPTemplateArgument(instValue, instType); } final IType orig= arg.getTypeValue();