std::optional<T> from C++14 draft