mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 02:06:01 +02:00
Bug 540538 - Pack size for CPPTemplateParameter
Change-Id: Ie67f27711ca658e9b4b3526c5c3c28541dcd3a15 Signed-off-by: Hannes Vogt <hannes@havogt.de>
This commit is contained in:
parent
1cbe7e32b9
commit
8404a76e6e
2 changed files with 19 additions and 1 deletions
|
@ -10954,4 +10954,18 @@ public class AST2TemplateTests extends AST2CPPTestBase {
|
||||||
IType waldo = helper.assertNonProblem("waldo");
|
IType waldo = helper.assertNonProblem("waldo");
|
||||||
assertSameType(SemanticUtil.getSimplifiedType(waldo), CommonCPPTypes.int_);
|
assertSameType(SemanticUtil.getSimplifiedType(waldo), CommonCPPTypes.int_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// template <bool...>
|
||||||
|
// struct list {};
|
||||||
|
//
|
||||||
|
// template <class... Ts>
|
||||||
|
// using foo = list<Ts::value...>;
|
||||||
|
//
|
||||||
|
// template<class T> struct trigger{};
|
||||||
|
//
|
||||||
|
// template <class T>
|
||||||
|
// using evaluate = trigger<foo<T>>;
|
||||||
|
public void testNonTypePackExpansion_540538() throws Exception {
|
||||||
|
parseAndCheckBindings();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPMember;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateNonTypeParameter;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateNonTypeParameter;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameterMap;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameterMap;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.ASTQueries;
|
import org.eclipse.cdt.internal.core.dom.parser.ASTQueries;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.DependentValue;
|
import org.eclipse.cdt.internal.core.dom.parser.DependentValue;
|
||||||
|
@ -481,7 +482,10 @@ public class EvalID extends CPPDependentEvaluation {
|
||||||
@Override
|
@Override
|
||||||
public int determinePackSize(ICPPTemplateParameterMap tpMap) {
|
public int determinePackSize(ICPPTemplateParameterMap tpMap) {
|
||||||
int r = fFieldOwner != null ? fFieldOwner.determinePackSize(tpMap) : CPPTemplates.PACK_SIZE_NOT_FOUND;
|
int r = fFieldOwner != null ? fFieldOwner.determinePackSize(tpMap) : CPPTemplates.PACK_SIZE_NOT_FOUND;
|
||||||
if (fNameOwner instanceof ICPPUnknownBinding) {
|
if (fNameOwner instanceof ICPPTemplateParameter) {
|
||||||
|
r = CPPTemplates.combinePackSize(r, CPPTemplates.determinePackSize((ICPPTemplateParameter) fNameOwner, tpMap));
|
||||||
|
}
|
||||||
|
else if (fNameOwner instanceof ICPPUnknownBinding) {
|
||||||
r = CPPTemplates.combinePackSize(r, CPPTemplates.determinePackSize((ICPPUnknownBinding) fNameOwner, tpMap));
|
r = CPPTemplates.combinePackSize(r, CPPTemplates.determinePackSize((ICPPUnknownBinding) fNameOwner, tpMap));
|
||||||
}
|
}
|
||||||
if (fTemplateArgs != null) {
|
if (fTemplateArgs != null) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue