https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101608

--- Comment #1 from 康桓瑋 <hewillk at gmail dot com> ---
This may help:

--- a/ranges_algobase.h
+++ b/ranges_algobase.h
@@ -525,16 +525,22 @@ namespace ranges
        if (__n <= 0)
          return __first;

-       // TODO: Generalize this optimization to contiguous iterators.
-       if constexpr (is_pointer_v<_Out>
-                     // Note that __is_byte already implies !is_volatile.
-                     && __is_byte<remove_pointer_t<_Out>>::__value
-                     && integral<_Tp>)
+#ifdef __cpp_lib_is_constant_evaluated
+       if (!std::is_constant_evaluated())
+#endif
          {
-           __builtin_memset(__first, static_cast<unsigned char>(__value),
__n);
-           return __first + __n;
+           // TODO: Generalize this optimization to contiguous iterators.
+           if constexpr (is_pointer_v<_Out>
+                   // Note that __is_byte already implies !is_volatile.
+                   && __is_byte<remove_pointer_t<_Out>>::__value
+                   && integral<_Tp>)
+             {
+               __builtin_memset(__first, static_cast<unsigned char>(__value),
__n);
+               return __first + __n;
+             }
          }
-       else if constexpr (is_scalar_v<_Tp>)
+       
+       if constexpr (is_scalar_v<_Tp>)
          {
            const auto __tmp = __value;
            for (; __n > 0; --__n, (void)++__first)

Reply via email to