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(const Nullable &obj) : data(obj.data) { } bool HasValue() const { return (data != null); } T getValue() const { return *data; } operator T() const { return *data; } }; template const Nullable Nullable::Null = Nullable(); }