diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalConstructor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalConstructor.java index 86ec0104b63..2b8bdb1e143 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalConstructor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalConstructor.java @@ -54,6 +54,8 @@ public final class EvalConstructor extends CPPDependentEvaluation { private final ICPPEvaluation[] fArguments; private boolean fCheckedIsTypeDependent; private boolean fIsTypeDependent; + private boolean fCheckedIsConstantExpression; + private boolean fIsConstantExpression; private static final IASTName TEMP_NAME = ASTNodeFactoryFactory.getDefaultCPPNodeFactory().newName(); public EvalConstructor(IType type, ICPPConstructor constructor, ICPPEvaluation[] arguments, IBinding templateDefinition) { @@ -99,7 +101,15 @@ public final class EvalConstructor extends CPPDependentEvaluation { @Override public boolean isConstantExpression(IASTNode point) { - return true; + if (!fCheckedIsConstantExpression) { + fCheckedIsConstantExpression = true; + fIsConstantExpression = computeIsConstantExpression(point); + } + return fIsConstantExpression; + } + + private boolean computeIsConstantExpression(IASTNode point) { + return fConstructor.isConstexpr() && areAllConstantExpressions(fArguments, point); } @Override