Ice for C++ 3.0 from ZeroC (http://www.zeroc.com/download.html, source code
available) doesn't compile anymore with GCC from the 4.1 branch. It compiled
fine with 4.0.1 and 4.0.2. I managed to reproduce the problem with the
following sample code:

----
class Dummy1;
class Dummy2;
void incRef(Dummy1*);
void incRef(Dummy2*);

template<typename T>
class Handle
{
public:
    Handle(T* r = 0) { incRef(r); }
};

namespace Test
{
class Process;
typedef ::Handle<Process> ProcessPrx;
}
void incRef(::Test::Process*);

void 
m()
{
    ::Test::ProcessPrx process;
}
----

I'm getting the following error:

---
Main.cpp: In constructor 'Handle<T>::Handle(T*) [with T = Test::Process]':
Main.cpp:24:   instantiated from here
Main.cpp:11: error: no matching function for call to 'incRef(Test::Process*&)'
Main.cpp:4: note: candidates are: void incRef(Dummy1*)
Main.cpp:5: note:                 void incRef(Dummy2*)
---

If the definition of the 'Handle' template is moved at the top, it compiles
fine.  The output of 'gcc -v -save-temps Main.cpp':

---
Using built-in specs.
Target: i686-pc-linux-gnu
Configured with: ../configure --enable-shared --enable-languages=c,c++
--prefix=/opt/gcc-4.1 --enable-threads=posix
Thread model: posix
gcc version 4.1.0 20051219 (prerelease)
 /opt/gcc-4.1/libexec/gcc/i686-pc-linux-gnu/4.1.0/cc1plus -E -quiet -v
-D_GNU_SOURCE Main.cpp -mtune=pentiumpro -fpch-preprocess -o Main.ii
ignoring nonexistent directory
"/opt/gcc-4.1/lib/gcc/i686-pc-linux-gnu/4.1.0/../../../../i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /opt/gcc-4.1/lib/gcc/i686-pc-linux-gnu/4.1.0/../../../../include/c++/4.1.0

/opt/gcc-4.1/lib/gcc/i686-pc-linux-gnu/4.1.0/../../../../include/c++/4.1.0/i686-pc-linux-gnu

/opt/gcc-4.1/lib/gcc/i686-pc-linux-gnu/4.1.0/../../../../include/c++/4.1.0/backward
 /usr/local/include
 /opt/gcc-4.1/include
 /opt/gcc-4.1/lib/gcc/i686-pc-linux-gnu/4.1.0/include
 /usr/include
End of search list.
 /opt/gcc-4.1/libexec/gcc/i686-pc-linux-gnu/4.1.0/cc1plus -fpreprocessed
Main.ii -quiet -dumpbase Main.cpp -mtune=pentiumpro -auxbase Main -version -o
Main.s
GNU C++ version 4.1.0 20051219 (prerelease) (i686-pc-linux-gnu)
        compiled by GNU C version 4.1.0 20051219 (prerelease).
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64389
Compiler executable checksum: 6367aa9360ae7c92e39b7212b696b4ab
Main.cpp: In constructor 'Handle<T>::Handle(T*) [with T = Test::Process]':
Main.cpp:25:   instantiated from here
Main.cpp:11: error: no matching function for call to 'incRef(Test::Process*&)'
Main.cpp:4: note: candidates are: void incRef(Dummy1*)
Main.cpp:5: note:                 void incRef(Dummy2*)


-- 
           Summary: 4.1 regression, code rejected: can't find matching
                    function
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: benoit at zeroc dot com
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


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

Reply via email to