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

bangerth@dealii.org bangerth@dealii.org
Thu Nov 14 15:37:00 GMT 2002


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



More information about the Gcc-bugs mailing list