[clang] 094e9f4 - PR47893: Synthesis of a comparison operator from an 'operator<=>'
Richard Smith via cfe-commits
cfe-commits at lists.llvm.org
Sun Oct 18 14:16:21 PDT 2020
Author: Richard Smith
Date: 2020-10-18T14:15:12-07:00
New Revision: 094e9f4779eb9b5c6a49014f2f80b8cbb833572f
URL: https://github.com/llvm/llvm-project/commit/094e9f4779eb9b5c6a49014f2f80b8cbb833572f
DIFF: https://github.com/llvm/llvm-project/commit/094e9f4779eb9b5c6a49014f2f80b8cbb833572f.diff
LOG: PR47893: Synthesis of a comparison operator from an 'operator<=>'
inherits the SFINAEness of its enclosing context.
Added:
Modified:
clang/lib/Sema/SemaTemplateInstantiate.cpp
clang/test/SemaCXX/cxx2a-three-way-comparison.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp
index 92a887964401..67ba2b87e40e 100644
--- a/clang/lib/Sema/SemaTemplateInstantiate.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp
@@ -856,6 +856,7 @@ Optional<TemplateDeductionInfo *> Sema::isSFINAEContext() const {
case CodeSynthesisContext::DefaultTemplateArgumentInstantiation:
case CodeSynthesisContext::PriorTemplateArgumentSubstitution:
case CodeSynthesisContext::DefaultTemplateArgumentChecking:
+ case CodeSynthesisContext::RewritingOperatorAsSpaceship:
// A default template argument instantiation and substitution into
// template parameters with arguments for prior parameters may or may
// not be a SFINAE context; look further up the stack.
@@ -874,7 +875,6 @@ Optional<TemplateDeductionInfo *> Sema::isSFINAEContext() const {
case CodeSynthesisContext::DeclaringSpecialMember:
case CodeSynthesisContext::DeclaringImplicitEqualityComparison:
case CodeSynthesisContext::DefiningSynthesizedFunction:
- case CodeSynthesisContext::RewritingOperatorAsSpaceship:
case CodeSynthesisContext::InitializingStructuredBinding:
case CodeSynthesisContext::MarkingClassDllexported:
// This happens in a context unrelated to template instantiation, so
diff --git a/clang/test/SemaCXX/cxx2a-three-way-comparison.cpp b/clang/test/SemaCXX/cxx2a-three-way-comparison.cpp
index 29ae95066e27..353360e052bb 100644
--- a/clang/test/SemaCXX/cxx2a-three-way-comparison.cpp
+++ b/clang/test/SemaCXX/cxx2a-three-way-comparison.cpp
@@ -31,3 +31,12 @@ struct B {
};
int &r = B().operator<=>(0);
+
+namespace PR47893 {
+ struct A {
+ void operator<=>(const A&) const;
+ };
+ template<typename T> auto f(T a, T b) -> decltype(a < b) = delete;
+ int &f(...);
+ int &r = f(A(), A());
+}
More information about the cfe-commits
mailing list