On 26 February 2018 at 22:52, Jonathan Wakely <jwak...@redhat.com> wrote: > But those are just stylistic issues, the technical side of the patch > is fine. I had to look up why we had two overloads for any_cast(any&&) > and that seems to be a leftover from experimental::any, so thanks for > cleaning that up too.
It was added by me when we (well, I) decided to support copyable-but-not-movable types. See, the current specification doesn't allow getting those types out of an rvalue any by value. Such an operation will perform an ill-formed move, with the two-overload solution it would've fallen back on copying. Weird as such types are, I thought it not-too-much-trouble to SFINAE-hack it to work. The specification has since been made stricter so that it doesn't leave any implementation leeway to allow that, so hence the removal of that lenience.