OSDN Git Service

PR c++/43559
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 30 Mar 2010 19:39:48 +0000 (19:39 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 30 Mar 2010 19:39:48 +0000 (19:39 +0000)
* pt.c (more_specialized_fn): Don't control cv-qualifier check
with same_type_p.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@157831 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/partial7.C [new file with mode: 0644]

index d790bfd..eb42b0b 100644 (file)
@@ -1,3 +1,9 @@
+2010-03-30  Jason Merrill  <jason@redhat.com>
+
+       PR c++/43559
+       * pt.c (more_specialized_fn): Don't control cv-qualifier check
+       with same_type_p.
+
 2010-03-26  Jason Merrill  <jason@redhat.com>
 
        PR c++/43509
index 3bd45f7..a58dba2 100644 (file)
@@ -15474,13 +15474,10 @@ more_specialized_fn (tree pat1, tree pat2, int len)
         than the type from the parameter template (as described above)
         that type is considered to be more specialized than the other. If
         neither type is more cv-qualified than the other then neither type
-        is more specialized than the other."
+        is more specialized than the other."  */
 
-         We check same_type_p explicitly because deduction can also succeed
-         in both directions when there is a nondeduced context.  */
       if (deduce1 && deduce2
-         && quals1 != quals2 && quals1 >= 0 && quals2 >= 0
-         && same_type_p (arg1, arg2))
+         && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
        {
          if ((quals1 & quals2) == quals2)
            lose2 = true;
index 21738c2..ddc9128 100644 (file)
@@ -1,3 +1,8 @@
+2010-03-30  Jason Merrill  <jason@redhat.com>
+
+       PR c++/43559
+       * g++.dg/template/partial7.C: New.
+
 2010-03-30  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
        * gcc.target/s390/stackcheck1.c: New testcase.
diff --git a/gcc/testsuite/g++.dg/template/partial7.C b/gcc/testsuite/g++.dg/template/partial7.C
new file mode 100644 (file)
index 0000000..0fd157f
--- /dev/null
@@ -0,0 +1,10 @@
+// PR c++/43559
+
+template<typename T, typename U> void f(U&) { }
+template<typename T, typename U> void f(T const&) { }
+
+int main()
+{
+        int a;
+        f<int, int const>(a);
+}