%module smart_pointer_member



%inline %{

  class Foo {
  public:
    int x[4];
    int y;
    static const int z;
    static const int ZZ = 3;
    static int zx;

    static int boo() { return 0;}

    friend int foo(Foo* foo) { return 0;}
  };
  
  class Bar {
    Foo *f;
  public:
    Bar(Foo *f) : f(f) { }
    Foo *operator->() {
      return f;
    }

    static int bua() { return 0;}
  };

  class CBar {
    Foo *f;
  public:
    CBar(Foo *f) : f(f) { }
    const Foo *operator->()  {
      return f;
    }
  };

  
  int get_y(Bar *b) 
  {
    return (*b)->y;
  }
  
  int get_z(Bar *b) 
  {
    return (*b)->z;
  }
%}


%{
  const int Foo::z = 3;
  int Foo::zx;
%}
