summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Sema/SemaOverload.cpp26
1 files changed, 12 insertions, 14 deletions
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index 8efb7c69d30..56135288db9 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -8977,6 +8977,18 @@ bool clang::isBetterOverloadCandidate(
// C++14 [over.match.best]p1 section 2 bullet 3.
}
+ // FIXME: Work around a defect in the C++17 guaranteed copy elision wording,
+ // as combined with the resolution to CWG issue 243.
+ //
+ // When the context is initialization by constructor ([over.match.ctor] or
+ // either phase of [over.match.list]), a constructor is preferred over
+ // a conversion function.
+ if (Kind == OverloadCandidateSet::CSK_InitByConstructor && NumArgs == 1 &&
+ Cand1.Function && Cand2.Function &&
+ isa<CXXConstructorDecl>(Cand1.Function) !=
+ isa<CXXConstructorDecl>(Cand2.Function))
+ return isa<CXXConstructorDecl>(Cand1.Function);
+
// -- F1 is a non-template function and F2 is a function template
// specialization, or, if not that,
bool Cand1IsSpecialization = Cand1.Function &&
@@ -9035,20 +9047,6 @@ bool clang::isBetterOverloadCandidate(
return true;
}
}
-
-
-
- // FIXME: Work around a defect in the C++17 guaranteed copy elision wording,
- // as combined with the resolution to CWG issue 243.
- //
- // When the context is initialization by constructor ([over.match.ctor] or
- // either phase of [over.match.list]), a constructor is preferred over
- // a conversion function.
- if (Kind == OverloadCandidateSet::CSK_InitByConstructor && NumArgs == 1 &&
- Cand1.Function && Cand2.Function &&
- isa<CXXConstructorDecl>(Cand1.Function) !=
- isa<CXXConstructorDecl>(Cand2.Function))
- return isa<CXXConstructorDecl>(Cand1.Function);
// Check for enable_if value-based overload resolution.
if (Cand1.Function && Cand2.Function) {
OpenPOWER on IntegriCloud