Optional<T>

Примечание

На момент публикации задания в вашем арсенале может не хватить приемов для оптимальной реализации типа. Цель — попробовать разные подходы и проанализировать их недостатки.

Цель

Спроектируйте шаблонный тип Optional<T>, передающий семантику наличия или отсутствия значения произвольного типа.

Интерфейс

Optional(T &&value)

Конструктор. Подумайте также о Rule of Five.

bool has_value()

Возвращает true, если в объекте есть значение.

operator bool()

Возвращает true, если в объекте есть значение.

T &operator*()

Если значение есть, возвращает ссылку на него. Если значения нет, поведение не определено.

T &value()

Если значение еть, возвращает ссылку на него. Если значения нет, генерирует исключение.

Optional<T> &operator=(const T &value)

Сохраняет новое значение value в объекте.