re PR c++/43559 (Overloaded template functions became ambiguous)

PR c++/43559
	* pt.c (more_specialized_fn): Don't control cv-qualifier check
	with same_type_p.

From-SVN: r157831
This commit is contained in:
Jason Merrill 2010-03-30 15:39:48 -04:00 committed by Jason Merrill
parent 26e020539c
commit ce0ecb98c2
4 changed files with 23 additions and 5 deletions

View 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

View 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;

View 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.

View File

@ -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);
}