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.