>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: [email protected]
>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:
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.