#include <stdio.h>

template <typename T,typename K, T get(K* ptr),void put(K* ptr,T data),int siz> struct refer {
  operator T(){return get((K*) (((int)this)-siz));}
	void operator =(T x){put((K*)(((int)this)-siz),x);}
	};
struct klasa{
	int x; static int _getx(klasa *obj){return obj->getx();} int getx(){ return x;}
	static void _setx(klasa *obj,int what){obj->setx(what);} void setx(int what){x=what;}  
int y; static int _gety(klasa *obj){return obj->gety();} int gety(){ return y;}
	static void _sety(klasa *obj,int what){obj->sety(what);} void sety(int what){y=what;}  
int z; static int _getz(klasa *obj){return obj->getz();} int getz(){ return z;}
	static void _setz(klasa *obj,int what){obj->setz(what);} void setz(int what){z=what;}  
 struct _klasa{refer<int,klasa, &klasa::_getx,&klasa::_setx, 0 > x;
refer<int,klasa, &klasa::_gety,&klasa::_sety, 0+sizeof(int) > y;
refer<int,klasa, &klasa::_getz,&klasa::_setz, 0+sizeof(int)+sizeof(int) > z;
};
	
};
int main(){
	klasa::_klasa *x=(klasa::_klasa *) (new klasa);

	x->x=4;
	printf("%i",x->x+0);
}
