This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
g++ 2.95.2 overload resolution does not follow ANSI standard
- To: gcc-bugs at gcc dot gnu dot org
- Subject: g++ 2.95.2 overload resolution does not follow ANSI standard
- From: Dan Gehlhaar <gehlhaar at Agouron dot COM>
- Date: Mon, 5 Jun 2000 16:45:25 -0700 (PDT)
Platform: IRIX 6.5
Compiler version: 2.95.2
Compiler flags: none
Description:
The following code compiles and runs as expected:
// --------------------------Start WORKS.C------------------------------
#include <iostream.h>
class A
{
public:
template <class T, class U> void Printit (T t, U u)
{ cout << "Just template: " << t << " " << u << endl; }
template <class T> void Printit (T t, double u)
{ cout << "Specialized template: " << t << " " << u << endl; }
};
main()
{
A a;
a.Printit ("Hello", 1);
a.Printit ("There", 4.5);
}
// --------------------------End WORKS.C------------------------------
The following, however, exits with a compiler error stating that
it can't resolve the overload ambiguity:
// --------------------------Start FAILS.C------------------------------
#include <iostream.h>
class A
{
public:
template <class T, class U> void Printit (T t, U u)
{ cout << "Just template: " << t << " " << u << endl; }
template <class T> void Printit (T t, double u, int i = 0)
{ cout << "Specialized template: " << t << " " << u << endl; }
};
main()
{
A a;
a.Printit ("Hello", 1);
a.Printit ("There", 4.5);
}
// --------------------------End FAILS.C------------------------------
The ANSI draft states that:
--A candidate function having more than m parameters is viable only
if the (m+1)-st parameter has a default argument. For the
purposes of overload resolution, the parameter list is truncated
on the right, so that there are exactly m parameters.
(http://www.cygnus.com/misc/wp/dec96pub/over.html#over.match.viable)
So, for the purposes of overload resolution, these two programs should
behave identically. If the first one works, so should the second one.
Or am I going loony?
Dan