I believe gcc is in error for calling the int* overload in the program below.
Sorry if this is a duplicate -- I went through the many lookup bugs in Bugzilla
but none of them looked quite like this one.

$ cat t.cpp && g++ -pedantic -W t.cpp && ./a.out
#include <assert.h>

int foo (void*) { return 0; }
template <class T> int bar (T *p) { return foo (p); }
int foo (int*) { return 1; }

int main ()
{
   assert (0 == bar ((int*)0));
}
Assertion failed: 0 == bar ((int*)0), file t.cpp, line 9
Abort (core dumped)


-- 
           Summary: lookup chooses the wrong overload
           Product: gcc
           Version: 4.0.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: sebor at roguewave dot com
 GCC build triplet: all
  GCC host triplet: all
GCC target triplet: all


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24948

Reply via email to