https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71387
--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> --- class EPoint { public: inline EPoint(); inline EPoint( const EPoint &p ); }; class EPointIteratorBase { public: explicit EPointIteratorBase( unsigned long size ) : m_index(0), m_sourceIsPrimitive(true) { } EPoint m_actPoint; unsigned long m_index; int m_sourceIsPrimitive; }; class EProperties { }; class EPrimitive { protected: explicit EPrimitive( const EProperties* inProps ) { } }; class ERectangleBase : public EPrimitive { public: ERectangleBase( const EProperties* inProps ) : EPrimitive( inProps ) { } virtual EPoint getLowerRight() const = 0; virtual EPoint getLowerLeft() const = 0; }; class EPointIteratorRectangleBase : public EPointIteratorBase { inline void _setPoint(); EPointIteratorRectangleBase( const ERectangleBase *rectBase ); const ERectangleBase *m_rectBase; }; inline void EPointIteratorRectangleBase::_setPoint() { if( m_index == 0 ) m_actPoint = m_rectBase->getLowerLeft(); else m_actPoint = m_rectBase->getLowerRight(); } EPointIteratorRectangleBase::EPointIteratorRectangleBase( const ERectangleBase *rectBase ) : EPointIteratorBase( 4 ) { _setPoint(); }