
Hi Arno,
I'm normally against obscure functions that are meant to save a few keystrokes. OTOH, while the verbose alternative is perfectly clear and I wouldn't even consider searching for a shortcut, this particular shortcut looks clear enough to justify it.
So, Arno: don't you agree swap is better?
Would a function like optional<T>::swap_if_initialized(T&) indeed be the preferable one for Arno's use case? It isn't yet entirely clear to me, as it seems that Arno would like to have an implicit conversion, while passing the value from optional<T> to its target.
Sorry for not responding earlier. I don't see how my use case is special over regular assignment,
Conceptually, it isn't of course.
apart from the fact that the assignment is conditional.
And which the choice of function name makes it crystal clear.
Like for any assignment, move optimization is certainly appreciated, and my use cases are indeed r-value assignments.
Right, except for the fact that move facilities are well known by now but still waiting around the corner to be used. That is, we can't just yet write that as: template<class T, class U> bool optional_assign( T&, optional<U>&& ) ; as we would a few years from now. swap() OTOH, being conceptually a cross move operation, has been doing move optimizations on a per-type basis since C++98. So, from the practical POV of what can be programmed today, swap() has the potential to move-optimize for free. Having said that, as Neils noted, optional_assign() can perform conversions, which has value on itself. So I would in favor of adding both optional_assign and optional_swap. Best -- Fernando Cacciola SciSoft Consulting http://www.scisoft-consulting.com