From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Received: (qmail 31377 invoked by uid 71); 11 Jan 2003 21:16:01 -0000 Date: Sat, 11 Jan 2003 21:16:00 -0000 Message-ID: <20030111211601.31375.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: Nathanael Nerode Subject: Re: c++/5050: template instantiation depth exceeds... Reply-To: Nathanael Nerode X-SW-Source: 2003-01/txt/msg00736.txt.bz2 List-Id: The following reply was made to PR c++/5050; it has been noted by GNATS. >>From neroden@twcny.rr.com Mon Jan 13 01:00:41 2003 From: Nathanael Nerode To: gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org, georg.wild@gmx.de, gcc-bugs@gcc.gnu.org, nobody@gcc.gnu.org Cc: Subject: Re: c++/5050: template instantiation depth exceeds... Date: Sat, 11 Jan 2003 16:07:43 -0500 The following testcase fails when compiled with -ftemplate-depth-1 -O2 or -ftemplate-depth-1 -O1, but not -ftemplate-depth-1 -O0. (It's always OK with template depth higher than 1). This is the error message: ---- test.cxx:5: error: template instantiation depth exceeds maximum of 1 (use -ftemplate-depth-NN to increase the maximum) instantiating `ostream& ostream::foo(const T&) [with T = int]' test.cxx:5: instantiated from `ostream& ostream::foo(const T&) [with T = int]'test.cxx:12: instantiated from here ---- The problem appears to be that the compiler doesn't realize that it's already instantiated `ostream& ostream::foo(const T&) [with T = int]'. It doesn't have to instantiate it repeatedly, does it now? At any rate, behaving differently with optimization is a no-no. This is the testcase: ---- struct ostream { template ostream& foo( const T & ) { return *this; } }; void foo() { ostream os; (os.foo(1)).foo(2); } ----