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]

Re: c++/8567: std::endl is of unknown type when overloading operator<< (repeat in case attachment didnt work)


Synopsis: std::endl is of unknown type when overloading operator<< (repeat in case attachment didnt work)

State-Changed-From-To: open->closed
State-Changed-By: bangerth
State-Changed-When: Thu Nov 14 15:37:17 2002
State-Changed-Why:
    Not a bug. Basically, it is this:
    ---------------------------------
    namespace std {
      template <typename T> T& endl (T&);
    };
    
    class BlackHole{};
    
    template <typename T> BlackHole& operator<<(BlackHole& bh, const T& dummy);
    template <typename T> BlackHole& operator<<(BlackHole& bh, T& (*dummy)(T&));
    
    int main() {
      BlackHole bh;
      bh << std::endl;  
    }
    -------------------------------
    Since there is no unambiguous function std::endl, the
    compiler cannot know which one to take as argument, so
    you have to disambiguate the situation by passing it the
    exact template argument list. Alternatively, you can give
    an overloaded non-template op<<; in this example, this 
    would do:
      BlackHole& operator<<(BlackHole& bh, int& (*dummy)(int&));
    Then std::endl<int> would be taken.
    
    W.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8567


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