@@ -237,6 +237,48 @@ struct RefQualifiedOverloaded {
237237#endif
238238};
239239
240+ // Compile-only guard: catch overload_cast resolution regressions/ambiguities early.
241+ using RefQualifiedOverloadedIntCast = py::detail::overload_cast_impl<int >;
242+ using RefQualifiedOverloadedFloatCast = py::detail::overload_cast_impl<float >;
243+ static_assert (
244+ std::is_same<decltype (RefQualifiedOverloadedIntCast{}(&RefQualifiedOverloaded::method)),
245+ py::str (RefQualifiedOverloaded::*)(int ) &>::value,
246+ "");
247+ static_assert (std::is_same<decltype (RefQualifiedOverloadedIntCast{}(
248+ &RefQualifiedOverloaded::method, py::const_)),
249+ py::str (RefQualifiedOverloaded::*)(int ) const &>::value,
250+ "");
251+ static_assert (
252+ std::is_same<decltype (RefQualifiedOverloadedFloatCast{}(&RefQualifiedOverloaded::method)),
253+ py::str (RefQualifiedOverloaded::*)(float ) &&>::value,
254+ "");
255+ static_assert (std::is_same<decltype (RefQualifiedOverloadedFloatCast{}(
256+ &RefQualifiedOverloaded::method, py::const_)),
257+ py::str (RefQualifiedOverloaded::*)(float ) const &&>::value,
258+ "");
259+
260+ #ifdef __cpp_noexcept_function_type
261+ using RefQualifiedOverloadedLongCast = py::detail::overload_cast_impl<long >;
262+ using RefQualifiedOverloadedDoubleCast = py::detail::overload_cast_impl<double >;
263+ static_assert (
264+ std::is_same<decltype (RefQualifiedOverloadedLongCast{}(&RefQualifiedOverloaded::method)),
265+ py::str (RefQualifiedOverloaded::*)(long ) & noexcept >::value,
266+ "");
267+ static_assert (std::is_same<decltype (RefQualifiedOverloadedLongCast{}(
268+ &RefQualifiedOverloaded::method, py::const_)),
269+ py::str (RefQualifiedOverloaded::*)(long ) const & noexcept >::value,
270+ "");
271+ static_assert (std::is_same
272+ < decltype (RefQualifiedOverloadedDoubleCast{}(&RefQualifiedOverloaded::method)),
273+ py::str (RefQualifiedOverloaded::*)(double ) && noexcept > ::value,
274+ "");
275+ static_assert (std::is_same
276+ < decltype (RefQualifiedOverloadedDoubleCast{}(&RefQualifiedOverloaded::method,
277+ py::const_)),
278+ py::str (RefQualifiedOverloaded::*)(double ) const && noexcept > ::value,
279+ "");
280+ #endif
281+
240282// Test explicit lvalue ref-qualification
241283struct RefQualified {
242284 int value = 0 ;
0 commit comments