Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
clang/lib/Sema/SemaConcept.cpp
Show First 20 Lines • Show All 287 Lines • ▼ Show 20 Lines | static bool CheckConstraintSatisfaction(Sema &S, const NamedDecl *Template, | ||||
Sema::InstantiatingTemplate Inst(S, TemplateIDRange.getBegin(), | Sema::InstantiatingTemplate Inst(S, TemplateIDRange.getBegin(), | ||||
Sema::InstantiatingTemplate::ConstraintsCheck{}, | Sema::InstantiatingTemplate::ConstraintsCheck{}, | ||||
const_cast<NamedDecl *>(Template), TemplateArgs, TemplateIDRange); | const_cast<NamedDecl *>(Template), TemplateArgs, TemplateIDRange); | ||||
if (Inst.isInvalid()) | if (Inst.isInvalid()) | ||||
return true; | return true; | ||||
MultiLevelTemplateArgumentList MLTAL; | MultiLevelTemplateArgumentList MLTAL; | ||||
MLTAL.addOuterTemplateArguments(TemplateArgs); | MLTAL.addOuterTemplateArguments(TemplateArgs); | ||||
if (const TypeAliasTemplateDecl *AliasTemplate = | |||||
dyn_cast_or_null<TypeAliasTemplateDecl>(Template)) { | |||||
MLTAL.addOuterRetainedLevels(AliasTemplate->getTemplateDepth()); | |||||
} | |||||
for (const Expr *ConstraintExpr : ConstraintExprs) { | for (const Expr *ConstraintExpr : ConstraintExprs) { | ||||
if (calculateConstraintSatisfaction(S, Template, TemplateArgs, | if (calculateConstraintSatisfaction(S, Template, TemplateArgs, | ||||
TemplateIDRange.getBegin(), MLTAL, | TemplateIDRange.getBegin(), MLTAL, | ||||
ConstraintExpr, Satisfaction)) | ConstraintExpr, Satisfaction)) | ||||
return true; | return true; | ||||
if (!Satisfaction.IsSatisfied) | if (!Satisfaction.IsSatisfied) | ||||
// [temp.constr.op] p2 | // [temp.constr.op] p2 | ||||
▲ Show 20 Lines • Show All 821 Lines • Show Last 20 Lines |