Converted detail::Result into general optional_ptr type
* Added set member method overload for easier value modification
* Idea: expand detail::optional_ptr into general optional type