diff -up doxygen-1.7.1/src/classdef.cpp.me doxygen-1.7.1/src/classdef.cpp --- doxygen-1.7.1/src/classdef.cpp.me 2010-09-08 14:55:33.000000000 +0200 +++ doxygen-1.7.1/src/classdef.cpp 2010-09-08 14:58:02.000000000 +0200 @@ -2162,20 +2162,18 @@ bool ClassDef::isBaseClass(ClassDef *bcd } if (baseClasses()) { - //BaseClassListIterator bcli(*baseClasses()); - //for ( ; bcli.current() && !found ; ++bcli) - BaseClassDef *bcdi = baseClasses()->first(); - while (bcdi) + // Beware: trying to optimise the iterator away using ->first() & ->next() + // causes bug 625531 + BaseClassListIterator bcli(*baseClasses()); + for ( ; bcli.current() && !found ; ++bcli) { - //ClassDef *ccd=bcli.current()->classDef; - ClassDef *ccd=bcdi->classDef; + ClassDef *ccd=bcli.current()->classDef; if (!followInstances && ccd->templateMaster()) ccd=ccd->templateMaster(); //printf("isBaseClass() baseclass %s\n",ccd->name().data()); if (ccd==bcd) found=TRUE; else found=ccd->isBaseClass(bcd,followInstances,level+1); - bcdi = baseClasses()->next(); } } return found;