Yap, another annoying difference-type issue.
|
template <class _CharT, _RANGES input_range _Range, class _FormatContext>
|
|
void _Range_formatter_format_as_string(_Range&& _Rng, _FormatContext& _Ctx, const bool _Debug) {
|
|
if constexpr (_RANGES contiguous_range<_Range>) {
|
|
const auto _Size = _STD _To_unsigned_like(_RANGES distance(_Rng));
|
|
|
|
if (!_STD in_range<size_t>(_Size)) [[unlikely]] {
|
|
_Throw_format_error("Formatted range is too long.");
|
|
}
|
_Size may be of integer-class type such as _Signed128, which currently does not work with in_range as it Mandates standard or extended integer types:
#include <ranges>
#include <print>
struct ContiguousIter {
using iterator_category = std::contiguous_iterator_tag;
using difference_type = std::_Signed128;
using element_type = char;
element_type& operator*() const;
ContiguousIter& operator++();
ContiguousIter operator++(int);
ContiguousIter& operator--();
ContiguousIter operator--(int);
ContiguousIter& operator+=(difference_type);
ContiguousIter& operator-=(difference_type);
element_type* operator->() const;
element_type& operator[](difference_type) const;
friend ContiguousIter operator+(ContiguousIter, difference_type);
friend ContiguousIter operator+(difference_type, ContiguousIter);
friend ContiguousIter operator-(ContiguousIter, difference_type);
friend difference_type operator-(ContiguousIter, ContiguousIter);
auto operator<=>(const ContiguousIter&) const = default;
};
int main() {
ContiguousIter it;
std::ranges::contiguous_range auto r = std::ranges::subrange(it, it + 42);
std::println("{:s}", r); // fire
}
Note that this is not reproducible on Godbolt as the STL version used by MSVC does not yet support formatting ranges. (Is there any way to reproduce this online?)
Yap, another annoying difference-type issue.
STL/stl/inc/format
Lines 3283 to 3290 in 89ca073
_Sizemay be of integer-class type such as_Signed128, which currently does not work within_rangeas it Mandates standard or extended integer types:Note that this is not reproducible on Godbolt as the STL version used by MSVC does not yet support formatting ranges. (Is there any way to reproduce this online?)