On Thu, 12 Nov 2026 at 08:06, Jakub Jelinek <[email protected]> wrote: > > Hi! > > Here is an updated version of the __make_signed/__make_unsigned trait. > Notable changes: 1) rebased on top of Arsen's quals changes > 2) __make_unsigned_selector_base no longer defined when using compiler > trait 3) uses __conditional_t in simd_details.h > > Bootstrapped/regtested on x86_64-linux and i686-linux. > > 2026-11-12 Jakub Jelinek <[email protected]> > > gcc/cp/ > * cp-trait.def (MAKE_SIGNED, MAKE_UNSIGNED): New traits. > * semantics.cc (finish_make_signed): New function. > (finish_trait_type): Handle CPTK_MAKE_SIGNED and CPTK_MAKE_UNSIGNED. > * cp-tree.h (finish_make_signed): Declare. > * reflect.cc (eval_make_signed): Use finish_make_signed. > gcc/testsuite/ > * g++.dg/ext/has-builtin-1.C: Add __has_builtin (__make_signed) > and __has_builtin (__make_unsigned) tests. > * g++.dg/ext/make_signed1.C: New test. > * g++.dg/ext/make_signed2.C: New test. > * g++.dg/ext/make_unsigned1.C: New test. > * g++.dg/ext/make_unsigned2.C: New test. > libstdc++-v3/ > * include/std/type_traits (std::make_unsigned, std::make_signed): Use > __make_unsigned and __make_signed traits if possible. > * include/std/bit (std::byteswap): Use make_unsigned rather than > __make_unsigned. > * include/bits/simd_details.h (std::simd::__value_preserving_cast): > Use > __conditional_t<integral<_From>, make_unsigned<_From>, > type_identity<_From>>::type instead of __make_unsigned<_From>::__type. > * testsuite/24_iterators/range_access/range_access_cpp20_neg.cc: > Adjust > test for different diagnostics when using > __make_signed/__make_unsigned > traits. > * testsuite/26_numerics/gcd/gcd_neg.cc: Likewise. > * testsuite/26_numerics/lcm/lcm_neg.cc: Likewise. > * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: > Likewise. > * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: > Likewise. > * testsuite/23_containers/mdspan/extents/class_mandates_neg.cc: > Likewise.
The library parts are OK, thanks.
