#include "sim_objects/default_trick_sys.sm" ##include "Classes.hh" // not sim objects, no namespace class A : public Normal { }; class B : public Template1 {}; class C : public Template2 > {}; // no namespace, sim object last class D : public Normal, public Trick::SimObject { public: D() { ("initialization") foo(); } }; class DerivedFromD : public D { public: DerivedFromD() { ("initialization") foo(); } }; class E : public Template1, public Trick::SimObject { public: E() { ("initialization") foo(); } }; class DerivedFromE : public E { public: DerivedFromE() { ("initialization") foo(); } }; class F : public Template2 >, public Trick::SimObject { public: F() { ("initialization") foo(); } }; class DerivedFromF : public F { public: DerivedFromF() { ("initialization") foo(); } }; // no namespace, sim object first class G : public Trick::SimObject, public Normal { public: G() { ("initialization") foo(); } }; class DerivedFromG : public G { public: DerivedFromG() { ("initialization") foo(); } }; class H : public Trick::SimObject, public Template1 { public: H() { ("initialization") foo(); } }; class DerivedFromH : public H { public: DerivedFromH() { ("initialization") foo(); } }; class I : public Trick::SimObject, public Template2 > { public: I() { ("initialization") foo(); } }; class DerivedFromI : public I { public: DerivedFromI() { ("initialization") foo(); } }; // not sim objects, namespace class J : public Foo::FooNormal {}; class K : public Foo::FooTemplate1 {}; class L : public Foo::FooTemplate2 > {}; // namespace, sim object last class M : public Foo::FooNormal, public Trick::SimObject { public: M() { ("initialization") foo(); } }; class DerivedFromM : public M { public: DerivedFromM() { ("initialization") foo(); } }; class N : public Foo::FooTemplate1, public Trick::SimObject { public: N() { ("initialization") foo(); } }; class DerivedFromN : public N { public: DerivedFromN() { ("initialization") foo(); } }; class O : public Foo::FooTemplate2 >, public Trick::SimObject { public: O() { ("initialization") foo(); } }; class DerivedFromO : public O { public: DerivedFromO() { ("initialization") foo(); } }; // namespace, sim object first class P : public Trick::SimObject, public Foo::FooNormal { public: P() { ("initialization") foo(); } }; class DerivedFromP : public P { public: DerivedFromP() { ("initialization") foo(); } }; class Q : public Trick::SimObject, public Foo::FooTemplate1 { public: Q() { ("initialization") foo(); } }; class DerivedFromQ : public Q { public: DerivedFromQ() { ("initialization") foo(); } }; class R : public Trick::SimObject, public Foo::FooTemplate2 > { public: R() { ("initialization") foo(); } }; class DerivedFromR : public R { public: DerivedFromR() { ("initialization") foo(); } }; // SimObject templates! template class S : public Trick::SimObject { public: S() { ("initialization") foo(); } }; class DerivedFromS : public S { public: DerivedFromS() { ("initialization") foo(); } }; template class T : public S { public: T() { ("initialization") foo(); } }; class DerivedFromT : public T > { public: DerivedFromT() { ("initialization") foo(); } }; // crazy stuff class Crazy1 : Foo::FooNormal, virtual Normal, private Template1, protected virtual Template2 >, public Trick::SimObject, virtual public Foo::FooTemplate1 { public: Crazy1() { ("initialization") foo(); } }; class DerivedFromCrazy1 : public Crazy1 { public: DerivedFromCrazy1() { ("initialization") foo(); } };