70 using value_type = Tp;
74 static constexpr value_type value{ Xp };
77 operator value_type()
const
98 if constexpr (
requires{value.operator->();})
99 return value.operator->();
101 return std::addressof(value);
104 template <auto Yp = Xp>
109 template <auto Yp = Xp>
114 template <auto Yp = Xp>
119 template <auto Yp = Xp>
124 template <auto Yp = Xp>
129 template <auto Yp = Xp>
134 template <auto Yp = Xp>
139 template <auto Yp = Xp>
141 operator++(
int)
const
144 template <auto Yp = Xp>
149 template <auto Yp = Xp>
151 operator--(
int)
const
154 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
159 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
164 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
169 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
174 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
179 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
184 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
189 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
194 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
199 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
204 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
209 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
214 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
219 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
224 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
229 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
234 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
239 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
244 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
249 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
254 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
259 template <constexpr_value Ap>
265 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
270 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
275 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
280 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
285 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
290 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
295 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
300 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
305 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
310 template <detail::_lhs_constexpr_wrapper<constexpr_wrapper> Ap, constexpr_value Bp>
315#if defined __cpp_static_call_operator && __cplusplus >= 202302L
316#define _static static
324 template <constexpr_value... Args>
326 _static
constexpr auto
327 operator()(Args...) _const
330 template <
typename... Args>
331 requires (not constexpr_value<std::remove_cvref_t<Args>> || ...)
332 _static
constexpr decltype(value(std::declval<Args>()...))
333 operator()(Args&&... _args) _const
334 {
return value(std::forward<Args>(_args)...); }
338 requires (not
requires { value(); })
342#if __cpp_multidimensional_subscript
343 template <constexpr_value... Args>
344 requires std::is_compound_v<value_type>
346 operator[](Args...) _const
349 template <
typename... Args>
350 requires (not constexpr_value<std::remove_cvref_t<Args>> || ...)
351 && std::is_compound_v<value_type>
352 _static
constexpr decltype(value[std::declval<Args>()...])
353 operator[](Args&&... _args) _const
354 {
return value[std::forward<Args>(_args)...]; }
356 template <constexpr_value Arg>
357 requires std::is_compound_v<value_type>
359 operator[](Arg) _const
362 template <
typename Arg>
363 requires (not constexpr_value<std::remove_cvref_t<Arg>>)
364 && std::is_compound_v<value_type>
365 _static
constexpr decltype(value[std::declval<Arg>()])
366 operator[](Arg&& _arg) _const
367 {
return value[std::forward<Arg>(_arg)]; }