fix: returning a copyable type with a deleted move constructor (#6143)

* fix: returning a copyable type with a deleted move constructor (#6142)

detail::function_ref's constructor SFINAE required
is_convertible<Ret, Ret>, which is false for a copyable type whose move
constructor is explicitly deleted (the trait tests conversion from an
xvalue). In C++17, such a prvalue return is legal via guaranteed copy
elision, so also accept an exact type match. Regression introduced in
3.1.0 by the call_impl outlining (#5887).

Fixes #6142

Assisted-by: ClaudeCode:claude-fable-5

* refactor: guard with __cpp_guaranteed_copy_elision

Per review: the feature-test macro expresses the intent more precisely
than PYBIND11_CPP17.

Assisted-by: ClaudeCode:claude-opus-5
3 files changed