#ifndef CIRCULAR_INHERITANCE_H #define CIRCULAR_INHERITANCE_H struct DinoEgg { void dinoEgg(void) const {} }; template struct Egg; template <> struct Egg : DinoEgg { Egg() {} void voidEgg(void) const {} }; template struct Egg : Egg { Egg(Chicken _chicken) {} Chicken chickenEgg(Chicken c) const { return c; } }; typedef Egg VoidEgg; typedef Egg BoolEgg; typedef Egg> EggEgg; struct NewEgg : Egg { NewEgg() : Egg(555) {} void newEgg() const {} }; #endif // !CIRCULAR_INHERITANCE_H