This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

undetected overloading ambiguity ?



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() {
--More--(79%)
  cout << "selection for each argument\n";
--More--(86%)
  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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]