@@ -25,24 +25,24 @@ template <size_t N, typename... Ts>
2525struct 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
4444template <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
5353template <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
5959template <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
6565template <size_t Rem, size_t ... Digits>
6666struct 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)
7474template <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}
7878template <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
8383template <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}
8787template <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
9292template <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
9797template <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
103103template <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)
110110template <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 >>
112112io_name (char const (&text1)[N1], char const (&text2)[N2], char const (&)[N3], char const (&)[N4]) {
113113 return io_name (text1, text2);
114114}
115115
116116template <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 >>
118118io_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
128128template <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}
132132template <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}
136136template <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}
140140template <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}
144144template <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
149149template <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}
153153template <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
162162template <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
167167template <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
172172template <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
179179template <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
185185template <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
190190template <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
196196template <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
202202template <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
210210template <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
215215template <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
220220template <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
0 commit comments