Skip to content

Commit 3914a28

Browse files
rwgkcursoragent
andcommitted
Refactor overload_cast_impl qualifier overloads with a macro.
As part of the qualifier-consistency maintenance follow-up, this reduces duplication in overload_cast_impl while preserving the same ref/noexcept coverage and keeping pedantic-clean macro expansion. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 94e6b4b commit 3914a28

1 file changed

Lines changed: 20 additions & 57 deletions

File tree

include/pybind11/detail/common.h

Lines changed: 20 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -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
};
12991262
PYBIND11_NAMESPACE_END(detail)
13001263

0 commit comments

Comments
 (0)