Source:
public ICPPEvaluation instantiate(ICPPTemplateParameterMap tpMap, int packOffset, ICPPClassSpecialization within, int maxdepth, IASTNode point) { IBinding binding = getBinding(); if (binding instanceof IEnumerator) { IEnumerator enumerator = (IEnumerator) binding; IType originalType = enumerator.getType(); IType type = CPPTemplates.instantiateType(originalType, tpMap, packOffset, within, point); IValue originalValue = enumerator.getValue(); IValue value = CPPTemplates.instantiateValue(originalValue, tpMap, packOffset, within, maxdepth, point); if (type != originalType || value != originalValue) return new EvalFixed(type, ValueCategory.PRVALUE, value); } else if (binding instanceof ICPPTemplateNonTypeParameter) { ICPPTemplateArgument argument = tpMap.getArgument((ICPPTemplateNonTypeParameter) binding); if (argument != null && argument.isNonTypeValue()) { return argument.getNonTypeEvaluation(); } } else if (binding instanceof ICPPUnknownBinding) { binding = resolveUnknown((ICPPUnknownBinding) binding, tpMap, packOffset, within, point); } else if (binding instanceof ICPPMethod) { IBinding owner = binding.getOwner(); if (owner instanceof ICPPClassTemplate) { owner = resolveUnknown(CPPTemplates.createDeferredInstance((ICPPClassTemplate) owner), tpMap, packOffset, within, point); } if (owner instanceof ICPPClassSpecialization) { binding = CPPTemplates.createSpecialization((ICPPClassSpecialization) owner, binding, point); } } else if (fBinding instanceof ICPPField) { IBinding owner = fBinding.getOwner(); if (owner instanceof ICPPClassTemplate) { owner = resolveUnknown(CPPTemplates.createDeferredInstance((ICPPClassTemplate) owner), tpMap, packOffset, within, point); } if (owner instanceof ICPPClassSpecialization) { binding = CPPTemplates.createSpecialization((ICPPClassSpecialization) owner, fBinding, point); } } if (binding == fBinding) return this; return new EvalBinding(binding, getFixedType()); }

Target:
public ICPPEvaluation instantiate(ICPPTemplateParameterMap tpMap, int packOffset, ICPPClassSpecialization within, int maxdepth, IASTNode point) { IBinding binding = getBinding(); if (binding instanceof IEnumerator) { IEnumerator enumerator = (IEnumerator) binding; IType originalType = enumerator.getType(); IType type = CPPTemplates.instantiateType(originalType, tpMap, packOffset, within, point); IValue originalValue = enumerator.getValue(); IValue value = CPPTemplates.instantiateValue(originalValue, tpMap, packOffset, within, maxdepth, point); if (type != originalType || value != originalValue) return new EvalFixed(type, ValueCategory.PRVALUE, value); } else if (binding instanceof ICPPTemplateNonTypeParameter) { ICPPTemplateArgument argument = tpMap.getArgument((ICPPTemplateNonTypeParameter) binding); if (argument != null && argument.isNonTypeValue()) { return argument.getNonTypeEvaluation(); } } else if (binding instanceof ICPPUnknownBinding) { binding = resolveUnknown((ICPPUnknownBinding) binding, tpMap, packOffset, within, point); } else if (binding instanceof ICPPMethod) { IBinding owner = binding.getOwner(); if (owner instanceof ICPPClassTemplate) { owner = resolveUnknown(CPPTemplates.createDeferredInstance((ICPPClassTemplate) owner), tpMap, packOffset, within, point); } if (owner instanceof ICPPClassSpecialization) { binding = CPPTemplates.createSpecialization((ICPPClassSpecialization) owner, binding, point); } } else if (binding instanceof ICPPField) { IBinding owner = binding.getOwner(); if (owner instanceof ICPPClassTemplate) { owner = resolveUnknown(CPPTemplates.createDeferredInstance((ICPPClassTemplate) owner), tpMap, packOffset, within, point); } if (owner instanceof ICPPClassSpecialization) { binding = CPPTemplates.createSpecialization((ICPPClassSpecialization) owner, binding, point); } } if (binding == fBinding) return this; return new EvalBinding(binding, getFixedType()); }