Skip to content

Commit 5bbcba5

Browse files
authored
use C++17 syntax to get rid of recursive template instantiations for concatenating type signatures (#4587)
1 parent 286873e commit 5bbcba5

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

include/pybind11/detail/descr.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,11 +143,24 @@ constexpr descr<N, Ts...> concat(const descr<N, Ts...> &descr) {
143143
return descr;
144144
}
145145

146+
#if defined(PYBIND11_CPP17)
147+
template <size_t N1, size_t N2, typename... Ts1, typename... Ts2>
148+
constexpr descr<N1 + N2 + 2, Ts1..., Ts2...> operator,(const descr<N1, Ts1...> &a,
149+
const descr<N2, Ts2...> &b) {
150+
return a + const_name(", ") + b;
151+
}
152+
153+
template <size_t N, typename... Ts, typename... Args>
154+
constexpr auto concat(const descr<N, Ts...> &d, const Args &...args) {
155+
return (d, ..., args);
156+
}
157+
#else
146158
template <size_t N, typename... Ts, typename... Args>
147159
constexpr auto concat(const descr<N, Ts...> &d, const Args &...args)
148160
-> decltype(std::declval<descr<N + 2, Ts...>>() + concat(args...)) {
149161
return d + const_name(", ") + concat(args...);
150162
}
163+
#endif
151164

152165
template <size_t N, typename... Ts>
153166
constexpr descr<N + 2, Ts...> type_descr(const descr<N, Ts...> &descr) {

0 commit comments

Comments
 (0)