@@ -1229,72 +1229,35 @@ struct overload_cast_impl {
12291229 return pmf;
12301230 }
12311231
1232- template <typename Return, typename Class>
1233- constexpr auto operator ()(Return (Class::*pmf)(Args...) &, std::false_type = {}) const noexcept
1234- -> decltype (pmf) {
1235- return pmf;
1236- }
1237-
1238- template <typename Return, typename Class>
1239- constexpr auto operator ()(Return (Class::*pmf)(Args...) const &, std::true_type) const noexcept
1240- -> decltype(pmf) {
1241- return pmf;
1242- }
1243-
1244- template <typename Return, typename Class>
1245- constexpr auto operator ()(Return (Class::*pmf)(Args...) &&,
1246- std::false_type = {}) const noexcept -> decltype (pmf) {
1247- return pmf;
1248- }
1249-
1250- template <typename Return, typename Class>
1251- constexpr auto operator ()(Return (Class::*pmf)(Args...) const &&,
1252- std::true_type) const noexcept -> decltype(pmf) {
1253- return pmf;
1232+ // Define const/non-const member-pointer selector pairs for qualifier combinations.
1233+ // The `qualifiers` parameter is used in type position, where extra parentheses are invalid.
1234+ // NOLINTBEGIN(bugprone-macro-parentheses)
1235+ #define PYBIND11_OVERLOAD_CAST_MEMBER_PTR (qualifiers ) \
1236+ template <typename Return, typename Class> \
1237+ constexpr auto operator ()(Return (Class::*pmf)(Args...) qualifiers, std::false_type = {}) \
1238+ const noexcept -> decltype (pmf) { \
1239+ return pmf; \
1240+ } \
1241+ template <typename Return, typename Class> \
1242+ constexpr auto operator ()(Return (Class::*pmf)(Args...) const qualifiers, std::true_type) \
1243+ const noexcept -> decltype(pmf) { \
1244+ return pmf; \
12541245 }
1246+ PYBIND11_OVERLOAD_CAST_MEMBER_PTR (&)
1247+ PYBIND11_OVERLOAD_CAST_MEMBER_PTR (&&)
12551248
12561249#ifdef __cpp_noexcept_function_type
12571250 template <typename Return>
12581251 constexpr auto operator ()(Return (*pf)(Args...) noexcept ) const noexcept -> decltype(pf) {
12591252 return pf;
12601253 }
12611254
1262- template <typename Return, typename Class>
1263- constexpr auto operator ()(Return (Class::*pmf)(Args...) noexcept ,
1264- std::false_type = {}) const noexcept -> decltype (pmf) {
1265- return pmf;
1266- }
1267-
1268- template <typename Return, typename Class>
1269- constexpr auto operator ()(Return (Class::*pmf)(Args...) const noexcept ,
1270- std::true_type) const noexcept -> decltype(pmf) {
1271- return pmf;
1272- }
1273-
1274- template <typename Return, typename Class>
1275- constexpr auto operator ()(Return (Class::*pmf)(Args...) & noexcept ,
1276- std::false_type = {}) const noexcept -> decltype (pmf) {
1277- return pmf;
1278- }
1279-
1280- template <typename Return, typename Class>
1281- constexpr auto operator ()(Return (Class::*pmf)(Args...) const & noexcept ,
1282- std::true_type) const noexcept -> decltype(pmf) {
1283- return pmf;
1284- }
1285-
1286- template <typename Return, typename Class>
1287- constexpr auto operator ()(Return (Class::*pmf)(Args...) && noexcept ,
1288- std::false_type = {}) const noexcept -> decltype (pmf) {
1289- return pmf;
1290- }
1291-
1292- template <typename Return, typename Class>
1293- constexpr auto operator ()(Return (Class::*pmf)(Args...) const && noexcept ,
1294- std::true_type) const noexcept -> decltype(pmf) {
1295- return pmf;
1296- }
1255+ PYBIND11_OVERLOAD_CAST_MEMBER_PTR (noexcept )
1256+ PYBIND11_OVERLOAD_CAST_MEMBER_PTR(& noexcept )
1257+ PYBIND11_OVERLOAD_CAST_MEMBER_PTR(&& noexcept )
12971258#endif
1259+ #undef PYBIND11_OVERLOAD_CAST_MEMBER_PTR
1260+ // NOLINTEND(bugprone-macro-parentheses)
12981261};
12991262PYBIND11_NAMESPACE_END (detail)
13001263
0 commit comments