------- Comment #11 from relf at os2 dot ru  2006-01-24 02:38 -------
Let's change returning type of friend operator+ in the original example to
foo<blah>, i.e.,

=====
template <class blah>                                                           
class foo;                                                                      

template <class blah>                                                           
foo<blah> operator+(int, foo<blah>);

template <class blah>                                                           
class foo {
public:                                                                         
  void operator+(int){}                                                         
  friend foo ::operator+ <>(int, foo);
};                                                                              
template <class blah>                                                           
foo<blah> operator+(int, foo<blah>){}

int main()                                                                      
{                                                                               
  foo<double> inst;                                                             
  inst+1;                                                                       
  1+inst;                                                                       
};
=====

Then g++ 4.0.3 reports weird error:\

a.cpp:11: error: non-template 'operator+' used as template
a.cpp:11: note: use 'foo<blah>::template operator+' to indicate that it is a
template
a.cpp:11: error: declaration of 'operator+' as non-function

What is wrong here? Should this behavior be filed as a separate bugreport?


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17122

Reply via email to