This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
undetected overloading ambiguity ?
- To: gcc-bugs at gcc dot gnu dot org
- Subject: undetected overloading ambiguity ?
- From: Alain Miniussi <alain at sophia dot cnrs dot fr>
- Date: Wed, 13 Oct 1999 12:50:19 +0200
The following example illustrate what seems to be a (small)
bug in gcc, basicaly, an overloaded function (let's call
them f1 and f1) is called with two argument, gcc rightly
select f1 for the first argument and f2 for the second. Yet,
it fails to detect ambiguity when both arguments are
provided.
Alain
Script started on Wed Oct 13 12:43:30 1999
alain@kashmir:~/stdcpp > more over.cpp
#include<iostream>
using namespace std;
struct A;
struct B;
void f(A const* a, int i) { cout << "f(A const* a, int i)\n"; }
void f(A* a, B* b) { cout << "f(A* a, B* b)\n"; }
void f1(A const* a) { cout << "f1(A const* a)\n"; }
void f1(A* a) { cout << "f1(A* a)\n"; }
void f2(int i) { cout << "f2(int i)\n"; }
void f2(B* b) { cout << "f2(B* b)\n"; }
A* get_a() { return 0;}
B* get_b() { return 0;}
int
main() {
[7m--More--(79%)[27m
cout << "selection for each argument\n";
[7m--More--(86%)[27m
f1(get_a());
f2(0);
cout << "gives\n";
f(get_a(),0);
return 0;
}
alain@kashmir:~/stdcpp > g++ -v over.cpp
Reading specs from /home/alain/gcc/lib/gcc-lib/i686-pc-linux-gnu/2.95.1/specs
gcc version 2.95.1 19990816 (release)
/home/alain/gcc/lib/gcc-lib/i686-pc-linux-gnu/2.95.1/cpp -lang-c++ -v -D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=95 -D__cplusplus -D__ELF__ -Dunix -D__i386__ -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__linux -Asystem(posix) -D__EXCEPTIONS -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -Di686 -Dpentiumpro -D__i686 -D__i686__ -D__pentiumpro -D__pentiumpro__ over.cpp /tmp/cc6Edkgn.ii
GNU CPP version 2.95.1 19990816 (release) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
/home/alain/gcc/lib/gcc-lib/i686-pc-linux-gnu/2.95.1/../../../../include/g++-3
/usr/local/include
/home/alain/gcc/lib/gcc-lib/i686-pc-linux-gnu/2.95.1/../../../../i686-pc-linux-gnu/include
/home/alain/gcc/lib/gcc-lib/i686-pc-linux-gnu/2.95.1/include
/usr/include
End of search list.
The following default directories have been omitted from the search path:
End of omitted list.
/home/alain/gcc/lib/gcc-lib/i686-pc-linux-gnu/2.95.1/cc1plus /tmp/cc6Edkgn.ii -quiet -dumpbase over.cc -version -o /tmp/ccM777FC.s
GNU C++ version 2.95.1 19990816 (release) (i686-pc-linux-gnu) compiled by GNU C version 2.95.1 19990816 (release).
as -V -Qy -o /tmp/ccujTjE9.o /tmp/ccM777FC.s
GNU assembler version 2.9.1 (i486-linux), using BFD version 2.9.1.0.25
/home/alain/gcc/lib/gcc-lib/i686-pc-linux-gnu/2.95.1/collect2 -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o /home/alain/gcc/lib/gcc-lib/i686-pc-linux-gnu/2.95.1/crtbegin.o -L/home/alain/gcc/lib/gcc-lib/i686-pc-linux-gnu/2.95.1 -L/home/alain/gcc/lib /tmp/ccujTjE9.o -lstdc++ -lm -lgcc -lc -lgcc /home/alain/gcc/lib/gcc-lib/i686-pc-linux-gnu/2.95.1/crtend.o /usr/lib/crtn.o
alain@kashmir:~/stdcpp > ./a.out
selection for each argument
f1(A* a)
f2(int i)
gives
f(A const* a, int i)
alain@kashmir:~/stdcpp > exit
exit
Script done on Wed Oct 13 12:44:06 1999