Re: "expected primary-expression before '>'" error?
by Thomas Maeder <maeder@[EMAIL PROTECTED]
>
Apr 19, 2008 at 02:01 AM
john.wilkinson43@[EMAIL PROTECTED]
writes:
> The following code gives an "expected primary-expression before '>'"
> error when compiled with gcc, Dev-C++ version 4.9.9.2. There is no
> such error with MSVC 2005 or 2008. I would be grateful to know if it
> a gcc bug, or alternatively what is wrong with the code.
The code is wrong.
> template< typename G >
> struct Test
> {
> template< typename T > T f() const;
> };
>
> template< typename G, typename T >
> void g()
> {
> Test< G > t;
> t.f< T >(); // error re****ted for this line
Since the name t is dependant, it's impossible for the compiler to
determine what the name t.f names. But the compiler needs this
information to determine whether < is the start of a template
parameter list or the less than operator.
The code therefore has to disambiguate the situation. The rule is that
unless the compiler is told otherwise, it has to assume that t.f does
not name a template. To tell the compiler otherwise, do
t.template f< T >();
--
[ See http://www.gotw.ca/resources/clcm.htm
for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]