ranges::adjacent_view::_Iterator::value_type should have been changed by
r14-8710-g65b4cba9d6a9ff to always produce std::tuple, even for the
N == 2 views::pairwise specialization.
libstdc++-v3/ChangeLog:
PR libstdc++/121956
* include/std/ranges (adjacent_view::_Iterator::value_type):
Always define as std::tuple<T, N>, not std::pair<T, T>.
* testsuite/std/ranges/adaptors/adjacent/1.cc: Check value type
of views::pairwise.
Reviewed-by: Patrick Palka <ppalka@redhat.com>
public:
using iterator_category = input_iterator_tag;
using iterator_concept = decltype(_S_iter_concept());
- using value_type = conditional_t<_Nm == 2,
- pair<range_value_t<_Base>, range_value_t<_Base>>,
- __detail::__repeated_tuple<range_value_t<_Base>, _Nm>>;
+ using value_type = __detail::__repeated_tuple<range_value_t<_Base>, _Nm>;
using difference_type = range_difference_t<_Base>;
_Iterator() = default;
return true;
}
+constexpr bool
+test05()
+{
+ // PR libstdc++/121956
+ int a[2]{};
+ __gnu_test::test_random_access_range r(a);
+ auto v = r | views::pairwise;
+ static_assert( std::is_same_v<ranges::range_value_t<decltype(v)>,
+ std::tuple<int, int>> );
+ return true;
+}
+
int
main()
{
static_assert(test02());
static_assert(test03());
static_assert(test04());
+ static_assert(test05());
}