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:
parent
26e020539c
commit
ce0ecb98c2
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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.
|
||||
|
10
gcc/testsuite/g++.dg/template/partial7.C
Normal file
10
gcc/testsuite/g++.dg/template/partial7.C
Normal 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);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user