diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d790bfdaa09..eb42b0be8c9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2010-03-30 Jason Merrill + + PR c++/43559 + * pt.c (more_specialized_fn): Don't control cv-qualifier check + with same_type_p. + 2010-03-26 Jason Merrill PR c++/43509 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 3bd45f7ea37..a58dba29ee3 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 21738c254bc..ddc9128c1e9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-03-30 Jason Merrill + + PR c++/43559 + * g++.dg/template/partial7.C: New. + 2010-03-30 Andreas Krebbel * 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 index 00000000000..0fd157fdcec --- /dev/null +++ b/gcc/testsuite/g++.dg/template/partial7.C @@ -0,0 +1,10 @@ +// PR c++/43559 + +template void f(U&) { } +template void f(T const&) { } + +int main() +{ + int a; + f(a); +}