[libcxx-commits] [libcxx] [libc++] Implement P4206R0 Revert string support in std::constant_wrapper (PR #203338)
via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Jun 12 11:46:35 PDT 2026
================
@@ -27,173 +28,148 @@ _LIBCPP_BEGIN_NAMESPACE_STD
#if _LIBCPP_STD_VER >= 26
-template <class _Tp>
-struct __cw_fixed_value {
- using __type _LIBCPP_NODEBUG = _Tp;
- _LIBCPP_HIDE_FROM_ABI constexpr __cw_fixed_value(__type __v) noexcept : __data(__v) {}
- _Tp __data;
-};
-
-template <class _Tp, size_t _Extent>
-struct __cw_fixed_value<_Tp[_Extent]> {
- using __type _LIBCPP_NODEBUG = _Tp[_Extent];
- _Tp __data[_Extent];
-
- _LIBCPP_HIDE_FROM_ABI constexpr __cw_fixed_value(_Tp (&__arr)[_Extent]) noexcept
- : __cw_fixed_value(__arr, make_index_sequence<_Extent>{}) {}
-
-private:
- template <size_t... _Idxs>
- _LIBCPP_HIDE_FROM_ABI constexpr __cw_fixed_value(_Tp (&__arr)[_Extent], index_sequence<_Idxs...>) noexcept
- : __data{__arr[_Idxs]...} {}
-};
-
-template <class _Tp, size_t _Extent>
-__cw_fixed_value(_Tp (&)[_Extent]) -> __cw_fixed_value<_Tp[_Extent]>;
-
-template <__cw_fixed_value _Xp,
-# ifdef _LIBCPP_COMPILER_GCC
- // gcc bug: https://gcc.gnu.org/PR117392
- class = typename decltype(__cw_fixed_value(_Xp))::__type
-# else
- class = typename decltype(_Xp)::__type
-# endif
- >
+template <auto _Xp, class = remove_cvref_t<decltype(_Xp)>>
struct constant_wrapper;
template <class _Tp>
concept __constexpr_param = requires { typename constant_wrapper<_Tp::value>; };
-template <__cw_fixed_value _Xp>
+template <auto _Xp>
constexpr auto cw = constant_wrapper<_Xp>{};
struct __cw_operators {
// unary operators
template <__constexpr_param _Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr auto operator+(_Tp) noexcept -> constant_wrapper<(+_Tp::value)> {
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr auto operator+(_Tp) noexcept
+ -> constant_wrapper<auto(+_Tp::value)> {
----------------
huixie90 wrote:
I don't get why these explicit `auto`s are needed. shouldn't they decay automatically?
https://github.com/llvm/llvm-project/pull/203338
More information about the libcxx-commits
mailing list