namespace System { // Represents an object whose underlying type is a value type that can also be assigned null like a reference type. template class Nullable { private: T* data; public: static const Nullable Null; Nullable() : data(null) { } Nullable(const T& newData) : data(const_cast(&newData)) { } Nullable(T const * const newData) : data(const_cast(newData)) { } Nullable(const Nullable &obj) : data(obj.data) { } bool HasValue() const { return (data != null); } T getValue() const { return *data; } operator T() const { return *data; } Nullable& operator =(const T * newVal) { data = newVal; return *this; } Nullable& operator =(const Nullable& right) { if (right == *this) goto end; *data = *right.data; end: return *this; } }; template const Nullable Nullable::Null = Nullable(); }