#pragma once template class Optional { public: Optional(): _empty(true) { }; Optional(T v): _empty(false), _value(v) { } T value() const { return _value; } bool isPresent() const { return !_empty; } bool isAbsent() const { return _empty; } static Optional empty() { return Optional(); } private: bool _empty; T _value; };