#include #ifndef __GNUC__ # define __PRETTY_FUNCTION__ __FUNCTION__ #endif class RecurrenceRule { public: class Observer { public: Observer() {fprintf(stderr, "A - %s\n", __PRETTY_FUNCTION__);} }; RecurrenceRule(){fprintf(stderr, "B - %s\n", __PRETTY_FUNCTION__);} void addObserver(Observer *) {fprintf(stderr, "C - %s\n", __PRETTY_FUNCTION__);} }; class Recurrence : public RecurrenceRule::Observer { public: class Observer { public: Observer() {fprintf(stderr, "D - %s\n", __PRETTY_FUNCTION__);} }; Recurrence() {fprintf(stderr, "E - %s\n", __PRETTY_FUNCTION__);} void addObserver(Observer *) {fprintf(stderr, "F - %s\n", __PRETTY_FUNCTION__);} }; class Incidence : public Recurrence::Observer { public: Incidence(); }; Incidence::Incidence() : Recurrence::Observer() { fprintf(stderr, "G - %s\n", __PRETTY_FUNCTION__); Recurrence *myRec = new Recurrence(); myRec->addObserver(NULL); // myRec->addObserver(this); // doesn't work with msvc } int main(int argc, char**argv) { Incidence *tmp = new Incidence(); delete tmp; return 1; }