Gavin Lambert wrote:
Future uses "T get()". This is established standard. Smart pointers use "T* get()", which is equivalent to the above. Also standard. Boost Optional uses "T& get()" (although also provides value(), presumably for standard compatibility).
Std Optional uses "T value()". This is either still experimental or approved for C++17; I'm not entirely sure how far along that is.
It's in C++17.
The different interfaces of the above seem unfortunate (and Std Optional seems incorrect in this regard to me).
So why not "T get()"? That's much more consistent with other types.
.get() is when you only have one thing to get; it's for one-element containers, where there's no ambiguity as to what is being got. expected<T, E> and friends have two; the value is .value() and the error is .error(), with their matching queries has_value() and has_error(). It's not that get() is unacceptably wrong, but the value/has_value/error/has_error convention is legitimate and consistent.