This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: c++/5050: template instantiation depth exceeds...
- From: Nathanael Nerode <neroden at twcny dot rr dot com>
- To: gcc-gnats at gcc dot gnu dot org, gcc-prs at gcc dot gnu dot org, georg dot wild at gmx dot de, gcc-bugs at gcc dot gnu dot org, nobody at gcc dot gnu dot org
- Date: Sat, 11 Jan 2003 16:07:43 -0500
- Subject: Re: c++/5050: template instantiation depth exceeds...
- Reply-to: neroden at twcny dot rr dot com
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<class T> ostream& foo( const T & )
{
return *this;
}
};
void foo()
{
ostream os;
(os.foo(1)).foo(2);
}
----