https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119748
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Ah yes, thanks.
(In reply to Jonathan Wakely from comment #0)
> _S_copy(__p, std::__niter_base(__k1), __k2 - __k1);
> #if __cpp_lib_concepts
> else if constexpr (contiguous_iterator<_Iterator>
> - && is_same_v<iter_value_t<_Iterator>, _CharT>)
> + && requires { { std::to_address(__k1) }
> + -> convertible_to<const _CharT*>; })
This needs to be:
else if constexpr (requires {
requires contiguous_iterator<_Iterator>;
{ std::to_address(__k1) }
-> convertible_to<const _CharT*>;
})
Otherwise we evaluate the requires-expression even when contiguous_iterator
isn't satisfied, and we can't use std::to_address if it's not a contiguous
iterator.