This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Templated insertion operators


||
I was curious if anyone has noticed problems with templated insertion operators for namespaced classes. Here is a snip of code:


------
namespace ns
{
  template<class T>
  class c
  {
     //...
  }
}

template <class T>
ostream& operator<<(ostream& os, const ns::c<T>& obj);
------

And the error I get is:
======
../../../include/SomeOtherClass.icc:163: no match for `_STL::basic_ostream<char,
_STL::char_traits<char> >& << const ns::c<SomeNamespace::SomeClass>&' operator
/usr/local/include/stlport/stl/_ostream.h:70: candidates are:
======


When I move the operator<< into the namespace this problem goes away (so there's a workaround), but it doesn't make since that it can't find the definition. As an aside, if I move the declaration into the namespace but not the implementation, then I get an ambiguity error between the 2 versions, so it sees the global one during that run. This leads me to believe that it's a problem with the compiler somehow, I just haven't figured out exactly what.||

Unfortunately, I can't get my prototype to fail (it sees the global operators just fine (sigh)), but I think that the problem lies in the fact that in my real code there are lots of nested templates and namespaces. So I don't have a small piece of code that will fail right now... sorry, but I'll keep working on it if anyone thinks this is worth pursuing.

Thanks,
Dan


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]