From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9346 invoked by alias); 14 Nov 2002 23:37:18 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 9325 invoked by uid 61); 14 Nov 2002 23:37:17 -0000 Date: Thu, 21 Nov 2002 04:17:00 -0000 Message-ID: <20021114233717.9324.qmail@sources.redhat.com> To: gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org, jstanek@iastate.edu, jstanek@vrac.iastate.edu, nobody@gcc.gnu.org From: bangerth@dealii.org Reply-To: bangerth@dealii.org, gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org, jstanek@iastate.edu, jstanek@vrac.iastate.edu, nobody@gcc.gnu.org, gcc-gnats@gcc.gnu.org Subject: Re: c++/8567: std::endl is of unknown type when overloading operator<< (repeat in case attachment didnt work) X-SW-Source: 2002-11/txt/msg00745.txt.bz2 List-Id: 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 T& endl (T&); }; class BlackHole{}; template BlackHole& operator<<(BlackHole& bh, const T& dummy); template 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 would be taken. W. http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8567