This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Compiler chokes on a simple template - why?
- From: Topi Maenpaa <topiolli at ee dot oulu dot fi>
- To: gcc at gcc dot gnu dot org
- Date: Thu, 17 Mar 2005 10:33:54 +0200
- Subject: Compiler chokes on a simple template - why?
- Organization: University of Oulu
Hi,
Here is a snippet that does not compile with gcc 3.4.1 (on Mandrake 10.1).
---------------------------------------------------
template <class T> class A
{
public:
template <class U> void test(T value) {}
};
template <class T> void test2(A<T>& a, T val)
{
a.test<int>(val);
}
int main()
{
A<int> a;
a.test<int>(1); //works fine
}
---------------------------------------------------
$ g++ -o test test.cc
test.cc: In function `void test2(A<T>&, T)':
test.cc:9: error: expected primary-expression before "int"
test.cc:9: error: expected `;' before "int"
The funny thing is that if I change the name of the "test2" function to
"test", everything is OK. The compiler complains only if the functions have
different names. Why does the name matter?
The code compiles if "test2" is not a template function. Furthermore, calling
A<T>::test directly from main rather than through the template function works
fine.
I don't know if this is really a compiler thing, but it's hard to imagine the
standard would impose such behavior.
Please cc your thoughts to me, I'm not a subscriber.
Thanks.
-Topi-