Strange behavior with templates and G++
Hi, While compiling the following code, I got an error : template class Super { public: Super(void) {} void Test(C*) {} }; class A { public: A(void) {} }; class A1 : public A { public: A1(void) : A() {} }; class A2 : public A { public: A2(void) : A() {} }; class Super2 : public Super, public Super { public: Super2(void) {} }; void Test(void) { Super2 T; A1* ptr; T.Test(ptr); } The compiler gives me the following error for the Test() function: error: request for member ‘Test’ is ambiguous error: candidates are: void Super::Test(C*) [with C = A2] error: void Super::Test(C*) [with C = A1] But here the call refers clearly to the second method. The error still appears if A1 and A2 do not inherit from a same root class. If I replace the code with an explicit call it works: T.Super::Test(ptr) But this make the code less cleaner. Is this a problem related to a misunderstood concept from me, a wrong implementation or a technical problem of g++ ? Thanks. -- Dr. Ir. Pascal Francq BELGIUM signature.asc Description: This is a digitally signed message part.
Re: Strange behavior with templates and G++
In fact, since it is related on how g++ is implementing its heritage mechanism in C++, I was thinking it was the right mailing-list. In fact, by adding a convenient method in Super2, the code compiles : template inline void Test(C* ptr) {Super::Test(ptr);} This trick let me suppose that a problem may exist in the way g++ links a call to the corresponding method when it handles template classes. On jeudi 17 février 2011, Jonathan Wakely wrote: > On 17 February 2011 11:03, Pascal Francq wrote: > > Is this a problem related to a misunderstood concept from me, a wrong > > implementation or a technical problem of g++ ? > > In any of those cases, such questions are off-topic on this mailing > list, which is for development of gcc, not help using it. Please see > http://gcc.gnu.org/lists.html and ask the question on the gcc-help > list, thanks. > > I believe G++ is correct in this case. -- Dr. Ir. Pascal Francq BELGIUM signature.asc Description: This is a digitally signed message part.