-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Closed
Labels
bugSomething isn't workingSomething isn't workingfixedSomething works now, yay!Something works now, yay!formatC++20/23 formatC++20/23 formatrangesC++20/23 rangesC++20/23 ranges
Description
Yap, another annoying difference-type issue.
Lines 3283 to 3290 in 89ca073
| 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?)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingfixedSomething works now, yay!Something works now, yay!formatC++20/23 formatC++20/23 formatrangesC++20/23 rangesC++20/23 ranges