Go forward to Routines.
Go backward to Top.
Go up to Top.

Limitations of g++
==================

   * Limitations on input source code: 240 nesting levels with the
     parser stacksize (YYSTACKSIZE) set to 500 (the default), and
     requires around 16.4k swap space per nesting level.  The parser
     needs about 2.09 * number of nesting levels worth of stackspace.

   * I suspect there are other uses of pushdecl_class_level that do not
     call set_identifier_type_value in tandem with the call to
     pushdecl_class_level.  It would seem to be an omission.

   * Access checking is unimplemented for nested types.

   * `volatile' is not implemented in general.

   * Pointers to members are only minimally supported, and there are
     places where the grammar doesn't even properly accept them yet.

   * `this' will be wrong in virtual members functions defined in a
     virtual base class, when they are overridden in a derived class,
     when called via a non-left most object.

     An example would be:

          extern "C" int printf(const char*, ...);
          struct A { virtual void f() { } };
          struct B : virtual A { int b; B() : b(0) {} void f() { b++; } };
          struct C : B {};
          struct D : B {};
          struct E : C, D {};
          int main()
          {
            E e;
            C& c = e; D& d = e;
            c.f(); d.f();
            printf ("C::b = %d, D::b = %d\n", e.C::b, e.D::b);
            return 0;
          }

     This will print out 2, 0, instead of 1,1.