[PATCH] D121517: Incorrectly accepts overload of (T&, int) vs. (T const&, U) #54347

Ed Catmur via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sat Mar 12 05:17:47 PST 2022


ecatmur updated this revision to Diff 414825.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D121517/new/

https://reviews.llvm.org/D121517

Files:
  clang/lib/Sema/SemaTemplateDeduction.cpp
  clang/test/SemaCXX/overload-call.cpp


Index: clang/test/SemaCXX/overload-call.cpp
===================================================================
--- clang/test/SemaCXX/overload-call.cpp
+++ clang/test/SemaCXX/overload-call.cpp
@@ -688,3 +688,13 @@
     f(pmf);
   }
 }
+
+namespace PR54347 {
+  template<class T> void f(T&, int); // expected-note {{candidate function}}
+  template<class U, class T> void f(T const&, U) // expected-note {{candidate function}};
+  void g(int const& i) { f(i, 0); } // expected-error {{ambiguous}}
+
+  template<class T> void f(T(&)[5], int); // expected-note {{candidate function}}
+  template<class U, class T> void f(T const(&)[5], U); // expected-note {{candidate function}}
+  void g(int const(& a)[5]) { f(a, 0); } // expected-error {{ambiguous}}
+}
Index: clang/lib/Sema/SemaTemplateDeduction.cpp
===================================================================
--- clang/lib/Sema/SemaTemplateDeduction.cpp
+++ clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -1358,7 +1358,7 @@
     if (ARef)
       A = A->getPointeeType();
 
-    if (PRef && ARef && S.Context.hasSameUnqualifiedType(P, A)) {
+    if (PRef && ARef) {
       // C++11 [temp.deduct.partial]p9:
       //   If, for a given type, deduction succeeds in both directions (i.e.,
       //   the types are identical after the transformations above) and both


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D121517.414825.patch
Type: text/x-patch
Size: 1322 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220312/6a6d8e15/attachment.bin>


More information about the cfe-commits mailing list