c++/9460: parse error on template member function

Wolfgang Bangerth bangerth@ticam.utexas.edu
Tue Jan 28 21:16:00 GMT 2003


The following reply was made to PR c++/9460; it has been noted by GNATS.

From: Wolfgang Bangerth <bangerth@ticam.utexas.edu>
To: Oliver Schoenborn <oliver.schoenborn@utoronto.ca>
Cc: gcc-gnats@gcc.gnu.org, <farfetchd@libero.it>
Subject: Re: c++/9460: parse error on template member function
Date: Tue, 28 Jan 2003 15:14:57 -0600 (CST)

 On Tue, 28 Jan 2003, Oliver Schoenborn wrote:
 
 > OK for the section, BUT there is still a bug, just not the right category
 > (like another developer said): when the member function name is changed from
 > test2 to test, the parse error disappears a few lines above disappears. This
 > has to be re-opened and re-categorized.
 
 No, Giovanni is wrong: both examples he shows are perfectly legal: in the 
 first one, Foo::F1 is called as can easily be seen in the assembler 
 output. The fact the Bar::F1 exists has no influence whatsoever.
 
 In the second, the same obviously holds.
 
 In both cases, you don't need the "template" keyword for disambiguation, 
 since neither the expression before the "." is template dependent (it is 
 just an object of non-templated type "Foo"), nor the one after the dot, 
 which _is_ templates by the template type is known at the time of parsing, 
 being a constant "int". It would be different if you would call
   Foo().F1<A> ();
 in which case you would have to use
   Foo().template F1<A> ();
 
 Unfortunately, this ICEs with the present mainline compile (I just filed a 
 report for this).
 
 W.
 
 -------------------------------------------------------------------------
 Wolfgang Bangerth             email:            bangerth@ticam.utexas.edu
                               www: http://www.ticam.utexas.edu/~bangerth/
 
 



More information about the Gcc-prs mailing list