well, with 20MB of commercial codebase, doing huge changes to "pick" is hard
However, we are always open to discussion.
I agree that cleaner syntax sugar there would be nice. However, the trouble is that as long as pick semantics is supposed to be used for function return values, there does not seem to be any other option (we need to use regular copy constructors there to pass return value to target).
Even worse, we like compiler to generate default copy constructors / assignment operators (doing that manually is way too much trouble).
So in the end it goes down to "you need to know type's transfer semantics".
I was trying to find alternatives (especially I do not like that const cast ugliness) for years, but was unable to come up with anything better.