This significantly improves the performance of std::any_cast, by avoiding an indirect call to the _S_manage function through a function pointer. Before we make that indirect call we've already established that the contained value has the expected type, which means we also know the manager type, and so can call one of its members directly. We also know the precise type in the any::emplace functions, because we've just constructed that type, so we can use the new member there too. That doesn't seem to affect performance, but we might as well use the new _S_access function anyway. Signed-off-by: Tim Adye Signed-off-by: Jonathan Wakely libstdc++-v3/ChangeLog: * include/std/any (any::_Manager::_S_access): New static function to access the contained value. (any::emplace, __any_caster): Use _S_access member of the manager type. Tested powerpc64le-linux. Committed to trunk. This patch was contributed by Tim Adye and accepted in line with the new policy announced in https://gcc.gnu.org/pipermail/gcc/2021-June/236182.html Thanks, Tim!