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++/5050: template instantiation depth exceeds...


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);
}
----


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