struct voi{};/*void structure*/
template <typename T,typename K, T get(K* ptr),void put(K* ptr,T data),int siz> struct _variable {
  operator T(){return get((K*)( ((int)this)-siz));}
	void operator =(T x){put((K*)((((int)this)-siz)),x);}
};
#include <cstdlib>
struct _foo {
struct _data; struct _variables; struct _interface  {typedef _data data;static _interface create(){_interface i(new _data); return i;}
int a(){
}
int b(){
}
_interface sth(){
}
			_data *_datas;
			_data *datas(){return (_data *) _datas;}
			_variables * operator ->(){return (_variables *) this;}
			_interface(_data *d){_datas=d; } _interface(){_datas=NULL;} 
 int getr(){return datas()->r;} void setr(int _x){datas()->r=_x;}  static int _getr(_interface *n){return (*n).getr();} static void _setr(_interface *n,int _x){(*n).setr(_x);} }; 
struct _data  {
 int r; 
_interface operator ->(){return _interface(this);} };
 struct _variables {_variable <int,_interface,_interface::_getr,_interface::_setr,0*sizeof(voi)> r; };
};typedef _foo::_interface foo;
struct _bar {
struct _data; struct _variables; struct _interface  : public foo {typedef _data data;static _interface create(){_interface i(new _data); return i;}
	int fi(int x){
	return 2*x;}
	_interface ths(_interface tht){
		return tht;}
			
			_data *datas(){return (_data *) _datas;}
			_variables * operator ->(){return (_variables *) this;}
			_interface(_data *d){_datas=d; } _interface(){_datas=NULL;} 
 int getx(){return datas()->x;} void setx(int _x){datas()->x=_x;}  static int _getx(_interface *n){return (*n).getx();} static void _setx(_interface *n,int _x){(*n).setx(_x);}  int gety(){return datas()->y;} void sety(int _x){datas()->y=_x;}  static int _gety(_interface *n){return (*n).gety();} static void _sety(_interface *n,int _x){(*n).sety(_x);}  int getz(){return datas()->z;} void setz(int _x){datas()->z=_x;}  static int _getz(_interface *n){return (*n).getz();} static void _setz(_interface *n,int _x){(*n).setz(_x);}  int getr(){return datas()->r;} void setr(int _x){datas()->r=_x;}  static int _getr(_interface *n){return (*n).getr();} static void _setr(_interface *n,int _x){(*n).setr(_x);}  _interface getleft(){return _interface((_data *) datas()->left._datas);} void setleft(_interface _x){datas()->left._datas=_x.datas();}  static _interface _getleft(_interface *n){return (*n).getleft();} static void _setleft(_interface *n,_interface _x){(*n).setleft(_x);}  _interface getright(){return _interface((_data *) datas()->right._datas);} void setright(_interface _x){datas()->right._datas=_x.datas();}  static _interface _getright(_interface *n){return (*n).getright();} static void _setright(_interface *n,_interface _x){(*n).setright(_x);} }; 
struct _data  : public foo::data {
 int x;  int y;  int z;  _interface left;  _interface right; 
_interface operator ->(){return _interface(this);} };
 struct _variables {_variable <int,_interface,_interface::_getx,_interface::_setx,0*sizeof(voi)> x; _variable <int,_interface,_interface::_gety,_interface::_sety,1*sizeof(voi)> y; _variable <int,_interface,_interface::_getz,_interface::_setz,2*sizeof(voi)> z; _variable <int,_interface,_interface::_getr,_interface::_setr,3*sizeof(voi)> r; _variable <_interface,_interface,_interface::_getleft,_interface::_setleft,4*sizeof(voi)> left; _variable <_interface,_interface,_interface::_getright,_interface::_setright,5*sizeof(voi)> right; };
};typedef _bar::_interface bar;
struct _baz {
struct _data; struct _variables; struct _interface  : public bar {typedef _data data;static _interface create(){_interface i(new _data); return i;}
			
			_data *datas(){return (_data *) _datas;}
			_variables * operator ->(){return (_variables *) this;}
			_interface(_data *d){_datas=d; } _interface(){_datas=NULL;} 
 int getaa(){return datas()->aa;} void setaa(int _x){datas()->aa=_x;}  static int _getaa(_interface *n){return (*n).getaa();} static void _setaa(_interface *n,int _x){(*n).setaa(_x);}  int getx(){return datas()->x;} void setx(int _x){datas()->x=_x;}  static int _getx(_interface *n){return (*n).getx();} static void _setx(_interface *n,int _x){(*n).setx(_x);}  int gety(){return datas()->y;} void sety(int _x){datas()->y=_x;}  static int _gety(_interface *n){return (*n).gety();} static void _sety(_interface *n,int _x){(*n).sety(_x);}  int getz(){return datas()->z;} void setz(int _x){datas()->z=_x;}  static int _getz(_interface *n){return (*n).getz();} static void _setz(_interface *n,int _x){(*n).setz(_x);}  int getr(){return datas()->r;} void setr(int _x){datas()->r=_x;}  static int _getr(_interface *n){return (*n).getr();} static void _setr(_interface *n,int _x){(*n).setr(_x);}  _interface getup(){return _interface((_data *) datas()->up._datas);} void setup(_interface _x){datas()->up._datas=_x.datas();}  static _interface _getup(_interface *n){return (*n).getup();} static void _setup(_interface *n,_interface _x){(*n).setup(_x);}  _interface getleft(){return _interface((_data *) datas()->left._datas);} void setleft(_interface _x){datas()->left._datas=_x.datas();}  static _interface _getleft(_interface *n){return (*n).getleft();} static void _setleft(_interface *n,_interface _x){(*n).setleft(_x);}  _interface getright(){return _interface((_data *) datas()->right._datas);} void setright(_interface _x){datas()->right._datas=_x.datas();}  static _interface _getright(_interface *n){return (*n).getright();} static void _setright(_interface *n,_interface _x){(*n).setright(_x);} }; 
struct _data  : public bar::data {
 int aa;  _interface up; 
_interface operator ->(){return _interface(this);} };
 struct _variables {_variable <int,_interface,_interface::_getaa,_interface::_setaa,0*sizeof(voi)> aa; _variable <int,_interface,_interface::_getx,_interface::_setx,1*sizeof(voi)> x; _variable <int,_interface,_interface::_gety,_interface::_sety,2*sizeof(voi)> y; _variable <int,_interface,_interface::_getz,_interface::_setz,3*sizeof(voi)> z; _variable <int,_interface,_interface::_getr,_interface::_setr,4*sizeof(voi)> r; _variable <_interface,_interface,_interface::_getup,_interface::_setup,5*sizeof(voi)> up; _variable <_interface,_interface,_interface::_getleft,_interface::_setleft,6*sizeof(voi)> left; _variable <_interface,_interface,_interface::_getright,_interface::_setright,7*sizeof(voi)> right; };
};typedef _baz::_interface baz;
#include <stdio.h>
int main(){
	baz x (baz::create());
	x->x=32;
	x->r=4;
	printf("%i %i",x->r+0,x->x+0);
}
