%module virtual_derivation /* Try to add to your favorite language a runtime test like this: b = B(3) if (b.get_a() != b.get_b()): print "something is wrong" The test runs fine with python, but not with ruby. */ %inline %{ struct A { ~A() { } int m_a; A(int a) :m_a(a) { } int get_a() { return m_a; } }; struct B : virtual A { B(int a): A(a) { } int get_b() { return get_a(); } // in ruby, get_a() returns trash if called from b, unless is // wrapped with the previous get_b or using the 'using' // declaration: // using A::get_a; }; class IndexReader{ public: virtual void norms() = 0; virtual ~IndexReader() {} }; class MultiReader : public IndexReader { protected: MultiReader(); }; %}