Skip to content

Commit 77f0fbe

Browse files
committed
teste
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>
1 parent 03d8f48 commit 77f0fbe

4 files changed

Lines changed: 50 additions & 42 deletions

File tree

include/pybind11/cast.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1779,7 +1779,7 @@ PYBIND11_NAMESPACE_BEGIN(detail)
17791779

17801780
// forward declaration (definition in pybind11.h)
17811781
template <typename T>
1782-
std::string generate_type_signature();
1782+
PYBIND11_CONSTEVAL std::string generate_type_signature();
17831783

17841784
// Declared in pytypes.h:
17851785
template <typename T, enable_if_t<!is_pyobject<T>::value, int>>

include/pybind11/detail/common.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,14 @@
103103
# define PYBIND11_DTOR_CONSTEXPR
104104
#endif
105105

106+
#if defined(__cpp_consteval)
107+
# define PYBIND11_CONSTEVAL consteval
108+
# define PYBIND11_CONSTEVAL_OR_CONSTEXPR consteval
109+
#else
110+
# define PYBIND11_CONSTEVAL
111+
# define PYBIND11_CONSTEVAL_OR_CONSTEXPR constexpr
112+
#endif
113+
106114
// Compiler version assertions
107115
#if defined(__INTEL_COMPILER)
108116
# if __INTEL_COMPILER < 1800

include/pybind11/detail/descr.h

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,24 @@ template <size_t N, typename... Ts>
2525
struct descr {
2626
char text[N + 1]{'\0'};
2727

28-
constexpr descr() = default;
28+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr() = default;
2929
// NOLINTNEXTLINE(google-explicit-constructor)
30-
constexpr descr(char const (&s)[N + 1]) : descr(s, make_index_sequence<N>()) {}
30+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr(char const (&s)[N + 1]) : descr(s, make_index_sequence<N>()) {}
3131

3232
template <size_t... Is>
33-
constexpr descr(char const (&s)[N + 1], index_sequence<Is...>) : text{s[Is]..., '\0'} {}
33+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr(char const (&s)[N + 1], index_sequence<Is...>) : text{s[Is]..., '\0'} {}
3434

3535
template <typename... Chars>
3636
// NOLINTNEXTLINE(google-explicit-constructor)
37-
constexpr descr(char c, Chars... cs) : text{c, static_cast<char>(cs)..., '\0'} {}
37+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr(char c, Chars... cs) : text{c, static_cast<char>(cs)..., '\0'} {}
3838

39-
static constexpr std::array<const std::type_info *, sizeof...(Ts) + 1> types() {
39+
static PYBIND11_CONSTEVAL_OR_CONSTEXPR std::array<const std::type_info *, sizeof...(Ts) + 1> types() {
4040
return {{&typeid(Ts)..., nullptr}};
4141
}
4242
};
4343

4444
template <size_t N1, size_t N2, typename... Ts1, typename... Ts2, size_t... Is1, size_t... Is2>
45-
constexpr descr<N1 + N2, Ts1..., Ts2...> plus_impl(const descr<N1, Ts1...> &a,
45+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<N1 + N2, Ts1..., Ts2...> plus_impl(const descr<N1, Ts1...> &a,
4646
const descr<N2, Ts2...> &b,
4747
index_sequence<Is1...>,
4848
index_sequence<Is2...>) {
@@ -51,16 +51,16 @@ constexpr descr<N1 + N2, Ts1..., Ts2...> plus_impl(const descr<N1, Ts1...> &a,
5151
}
5252

5353
template <size_t N1, size_t N2, typename... Ts1, typename... Ts2>
54-
constexpr descr<N1 + N2, Ts1..., Ts2...> operator+(const descr<N1, Ts1...> &a,
54+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<N1 + N2, Ts1..., Ts2...> operator+(const descr<N1, Ts1...> &a,
5555
const descr<N2, Ts2...> &b) {
5656
return plus_impl(a, b, make_index_sequence<N1>(), make_index_sequence<N2>());
5757
}
5858

5959
template <size_t N>
60-
constexpr descr<N - 1> const_name(char const (&text)[N]) {
60+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<N - 1> const_name(char const (&text)[N]) {
6161
return descr<N - 1>(text);
6262
}
63-
constexpr descr<0> const_name(char const (&)[1]) { return {}; }
63+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<0> const_name(char const (&)[1]) { return {}; }
6464

6565
template <size_t Rem, size_t... Digits>
6666
struct int_to_str : int_to_str<Rem / 10, Rem % 10, Digits...> {};
@@ -72,49 +72,49 @@ struct int_to_str<0, Digits...> {
7272

7373
// Ternary description (like std::conditional)
7474
template <bool B, size_t N1, size_t N2>
75-
constexpr enable_if_t<B, descr<N1 - 1>> const_name(char const (&text1)[N1], char const (&)[N2]) {
75+
PYBIND11_CONSTEVAL_OR_CONSTEXPR enable_if_t<B, descr<N1 - 1>> const_name(char const (&text1)[N1], char const (&)[N2]) {
7676
return const_name(text1);
7777
}
7878
template <bool B, size_t N1, size_t N2>
79-
constexpr enable_if_t<!B, descr<N2 - 1>> const_name(char const (&)[N1], char const (&text2)[N2]) {
79+
PYBIND11_CONSTEVAL_OR_CONSTEXPR enable_if_t<!B, descr<N2 - 1>> const_name(char const (&)[N1], char const (&text2)[N2]) {
8080
return const_name(text2);
8181
}
8282

8383
template <bool B, typename T1, typename T2>
84-
constexpr enable_if_t<B, T1> const_name(const T1 &d, const T2 &) {
84+
PYBIND11_CONSTEVAL_OR_CONSTEXPR enable_if_t<B, T1> const_name(const T1 &d, const T2 &) {
8585
return d;
8686
}
8787
template <bool B, typename T1, typename T2>
88-
constexpr enable_if_t<!B, T2> const_name(const T1 &, const T2 &d) {
88+
PYBIND11_CONSTEVAL_OR_CONSTEXPR enable_if_t<!B, T2> const_name(const T1 &, const T2 &d) {
8989
return d;
9090
}
9191

9292
template <size_t Size>
93-
auto constexpr const_name() -> remove_cv_t<decltype(int_to_str<Size / 10, Size % 10>::digits)> {
93+
auto PYBIND11_CONSTEVAL_OR_CONSTEXPR const_name() -> remove_cv_t<decltype(int_to_str<Size / 10, Size % 10>::digits)> {
9494
return int_to_str<Size / 10, Size % 10>::digits;
9595
}
9696

9797
template <typename Type>
98-
constexpr descr<1, Type> const_name() {
98+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<1, Type> const_name() {
9999
return {'%'};
100100
}
101101

102102
// Use a different name based on whether the parameter is used as input or output
103103
template <size_t N1, size_t N2>
104-
constexpr descr<N1 + N2 + 1> io_name(char const (&text1)[N1], char const (&text2)[N2]) {
104+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<N1 + N2 + 1> io_name(char const (&text1)[N1], char const (&text2)[N2]) {
105105
return const_name("@") + const_name(text1) + const_name("@") + const_name(text2)
106106
+ const_name("@");
107107
}
108108

109109
// Ternary description for io_name (like the numeric type_caster)
110110
template <bool B, size_t N1, size_t N2, size_t N3, size_t N4>
111-
constexpr enable_if_t<B, descr<N1 + N2 + 1>>
111+
PYBIND11_CONSTEVAL_OR_CONSTEXPR enable_if_t<B, descr<N1 + N2 + 1>>
112112
io_name(char const (&text1)[N1], char const (&text2)[N2], char const (&)[N3], char const (&)[N4]) {
113113
return io_name(text1, text2);
114114
}
115115

116116
template <bool B, size_t N1, size_t N2, size_t N3, size_t N4>
117-
constexpr enable_if_t<!B, descr<N3 + N4 + 1>>
117+
PYBIND11_CONSTEVAL_OR_CONSTEXPR enable_if_t<!B, descr<N3 + N4 + 1>>
118118
io_name(char const (&)[N1], char const (&)[N2], char const (&text3)[N3], char const (&text4)[N4]) {
119119
return io_name(text3, text4);
120120
}
@@ -126,99 +126,99 @@ io_name(char const (&)[N1], char const (&)[N2], char const (&text3)[N3], char co
126126
#ifndef _
127127
# define PYBIND11_DETAIL_UNDERSCORE_BACKWARD_COMPATIBILITY
128128
template <size_t N>
129-
constexpr descr<N - 1> _(char const (&text)[N]) {
129+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<N - 1> _(char const (&text)[N]) {
130130
return const_name<N>(text);
131131
}
132132
template <bool B, size_t N1, size_t N2>
133-
constexpr enable_if_t<B, descr<N1 - 1>> _(char const (&text1)[N1], char const (&text2)[N2]) {
133+
PYBIND11_CONSTEVAL_OR_CONSTEXPR enable_if_t<B, descr<N1 - 1>> _(char const (&text1)[N1], char const (&text2)[N2]) {
134134
return const_name<B, N1, N2>(text1, text2);
135135
}
136136
template <bool B, size_t N1, size_t N2>
137-
constexpr enable_if_t<!B, descr<N2 - 1>> _(char const (&text1)[N1], char const (&text2)[N2]) {
137+
PYBIND11_CONSTEVAL_OR_CONSTEXPR enable_if_t<!B, descr<N2 - 1>> _(char const (&text1)[N1], char const (&text2)[N2]) {
138138
return const_name<B, N1, N2>(text1, text2);
139139
}
140140
template <bool B, typename T1, typename T2>
141-
constexpr enable_if_t<B, T1> _(const T1 &d1, const T2 &d2) {
141+
PYBIND11_CONSTEVAL_OR_CONSTEXPR enable_if_t<B, T1> _(const T1 &d1, const T2 &d2) {
142142
return const_name<B, T1, T2>(d1, d2);
143143
}
144144
template <bool B, typename T1, typename T2>
145-
constexpr enable_if_t<!B, T2> _(const T1 &d1, const T2 &d2) {
145+
PYBIND11_CONSTEVAL_OR_CONSTEXPR enable_if_t<!B, T2> _(const T1 &d1, const T2 &d2) {
146146
return const_name<B, T1, T2>(d1, d2);
147147
}
148148

149149
template <size_t Size>
150-
auto constexpr _() -> remove_cv_t<decltype(int_to_str<Size / 10, Size % 10>::digits)> {
150+
auto PYBIND11_CONSTEVAL_OR_CONSTEXPR _() -> remove_cv_t<decltype(int_to_str<Size / 10, Size % 10>::digits)> {
151151
return const_name<Size>();
152152
}
153153
template <typename Type>
154-
constexpr descr<1, Type> _() {
154+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<1, Type> _() {
155155
return const_name<Type>();
156156
}
157157
#endif // #ifndef _
158158

159-
constexpr descr<0> concat() { return {}; }
160-
constexpr descr<0> union_concat() { return {}; }
159+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<0> concat() { return {}; }
160+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<0> union_concat() { return {}; }
161161

162162
template <size_t N, typename... Ts>
163-
constexpr descr<N, Ts...> concat(const descr<N, Ts...> &descr) {
163+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<N, Ts...> concat(const descr<N, Ts...> &descr) {
164164
return descr;
165165
}
166166

167167
template <size_t N, typename... Ts>
168-
constexpr descr<N, Ts...> union_concat(const descr<N, Ts...> &descr) {
168+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<N, Ts...> union_concat(const descr<N, Ts...> &descr) {
169169
return descr;
170170
}
171171

172172
template <size_t N1, size_t N2, typename... Ts1, typename... Ts2>
173-
constexpr descr<N1 + N2 + 3, Ts1..., Ts2...> operator|(const descr<N1, Ts1...> &a,
173+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<N1 + N2 + 3, Ts1..., Ts2...> operator|(const descr<N1, Ts1...> &a,
174174
const descr<N2, Ts2...> &b) {
175175
return a + const_name(" | ") + b;
176176
}
177177

178178
#ifdef __cpp_fold_expressions
179179
template <size_t N1, size_t N2, typename... Ts1, typename... Ts2>
180-
constexpr descr<N1 + N2 + 2, Ts1..., Ts2...> operator,(const descr<N1, Ts1...> &a,
180+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<N1 + N2 + 2, Ts1..., Ts2...> operator,(const descr<N1, Ts1...> &a,
181181
const descr<N2, Ts2...> &b) {
182182
return a + const_name(", ") + b;
183183
}
184184

185185
template <size_t N, typename... Ts, typename... Args>
186-
constexpr auto concat(const descr<N, Ts...> &d, const Args &...args) {
186+
PYBIND11_CONSTEVAL_OR_CONSTEXPR auto concat(const descr<N, Ts...> &d, const Args &...args) {
187187
return (d, ..., args);
188188
}
189189

190190
template <size_t N, typename... Ts, typename... Args>
191-
constexpr auto union_concat(const descr<N, Ts...> &d, const Args &...args) {
191+
PYBIND11_CONSTEVAL_OR_CONSTEXPR auto union_concat(const descr<N, Ts...> &d, const Args &...args) {
192192
return (d | ... | args);
193193
}
194194

195195
#else
196196
template <size_t N, typename... Ts, typename... Args>
197-
constexpr auto concat(const descr<N, Ts...> &d, const Args &...args)
197+
PYBIND11_CONSTEVAL_OR_CONSTEXPR auto concat(const descr<N, Ts...> &d, const Args &...args)
198198
-> decltype(std::declval<descr<N + 2, Ts...>>() + concat(args...)) {
199199
return d + const_name(", ") + concat(args...);
200200
}
201201

202202
template <size_t N, typename... Ts, typename... Args>
203-
constexpr auto union_concat(const descr<N, Ts...> &d, const Args &...args)
203+
PYBIND11_CONSTEVAL_OR_CONSTEXPR auto union_concat(const descr<N, Ts...> &d, const Args &...args)
204204
-> decltype(std::declval<descr<N + 3, Ts...>>() + union_concat(args...)) {
205205
return d + const_name(" | ") + union_concat(args...);
206206
}
207207

208208
#endif
209209

210210
template <size_t N, typename... Ts>
211-
constexpr descr<N + 2, Ts...> type_descr(const descr<N, Ts...> &descr) {
211+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<N + 2, Ts...> type_descr(const descr<N, Ts...> &descr) {
212212
return const_name("{") + descr + const_name("}");
213213
}
214214

215215
template <size_t N, typename... Ts>
216-
constexpr descr<N + 4, Ts...> arg_descr(const descr<N, Ts...> &descr) {
216+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<N + 4, Ts...> arg_descr(const descr<N, Ts...> &descr) {
217217
return const_name("@^") + descr + const_name("@!");
218218
}
219219

220220
template <size_t N, typename... Ts>
221-
constexpr descr<N + 4, Ts...> return_descr(const descr<N, Ts...> &descr) {
221+
PYBIND11_CONSTEVAL_OR_CONSTEXPR descr<N + 4, Ts...> return_descr(const descr<N, Ts...> &descr) {
222222
return const_name("@$") + descr + const_name("@!");
223223
}
224224

include/pybind11/pybind11.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ inline std::string replace_newlines_and_squash(const char *text) {
102102
}
103103

104104
/* Generate a proper function signature */
105-
inline std::string generate_function_signature(const char *type_caster_name_field,
105+
PYBIND11_DTOR_CONSTEXPR inline std::string generate_function_signature(const char *type_caster_name_field,
106106
detail::function_record *func_rec,
107107
const std::type_info *const *types,
108108
size_t &type_index,
@@ -230,8 +230,8 @@ inline std::string generate_function_signature(const char *type_caster_name_fiel
230230
}
231231

232232
template <typename T>
233-
inline std::string generate_type_signature() {
234-
static constexpr auto caster_name_field = make_caster<T>::name;
233+
PYBIND11_CONSTEVAL inline std::string generate_type_signature() {
234+
constexpr auto caster_name_field = make_caster<T>::name;
235235
PYBIND11_DESCR_CONSTEXPR auto descr_types = decltype(caster_name_field)::types();
236236
// Create a default function_record to ensure the function signature has the proper
237237
// configuration e.g. no_convert.

0 commit comments

Comments
 (0)