>Number: 10845 >Category: c++ >Synopsis: `template method` not matched in template class >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Sun May 18 17:56:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: have@ann.jussieu.fr >Release: g++-3.2, 3.3 >Organization: >Environment: Linux i686 >Description: error: no matching function for call to `A<int>::f(int&, A<int>::SubA<int>&)'. In what follows, words written as _underscored_ mean that without any _underscored_ hypothesis, bug does not occur. Let us consider a method f (with _two_ templates arguments) of a _template_ class A. The first argument is given by a _template T1_. The second argument is given as a _template_ sub class of A (SubA<L>) and the second template typename of f is given for matching L. Moreover, there exists (at least) another template method in A which has the same argument type than the second one of f. Then f cannot be found when it is called. >How-To-Repeat: Try to compile this code ---8<------------ template<typename T> struct A { template<typename L> struct SubA { }; template<typename T1,typename L> void f(T1 & t1, SubA<L> & t2) { } template<typename U> void g(SubA<U> & suba) { } template<typename U> void h(SubA<U> & suba) { } }; int main(void) { int i; A<int> a; A<int>::SubA<int> suba; a.f(i,suba); a.g(suba); a.h(suba); } >Fix: >Release-Note: >Audit-Trail: >Unformatted: