#pragma once template<class T> struct pointer { T* ref; pointer():ref(0) { } pointer(T* _p):ref(_p) { } T* operator -> () { return ref; } pointer<T>& operator = (const pointer<T> _right) { ref = _right.ref; return *this; } pointer<T>& operator = (T* _right) { ref = _right; return *this; } bool operator == (T* _right) { return ref == _right; } operator T* () { return ref; } bool empty() { return ref == 0; } bool valid() { return ref != 0; } };