// { dg-do assemble } // { dg-options "-O" } // Bug: Synthesizing methods for the nested class screwed up current_class_decl // for the outer class. class A; class AH { public: AH ( A * p = 0 ); AH ( const AH & from ) : pointer( from.pointer ) { inc(); } ~ AH () { dec(); } private: A * pointer; void inc() const; void dec() const; }; class A { protected: struct AttrTable { struct Row { }; }; public: class Attributes { public: class iterator { public: iterator() : mo(0), attr(0) {} iterator& operator++() { ++attr; return *this; } iterator operator++(int) { iterator tmp = *this; ++*this; return tmp; } private: AH mo; const AttrTable::Row* attr; }; Attributes(AH mo) : mo(mo) {} AH mo; }; };