template <typename T,typename K, T get(K* ptr),void put(K* ptr,T data),int siz> class refer {
  T(){return get((K*) (((int)this)-siz));}
	void operator =(K x){put((K*)(((int)this)-siz),x);}
	};
class 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;}  
 class _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 x;
}
