зеркало из https://github.com/microsoft/STL.git
Make join_view and join_with_view iterators default-constructible (the forgotten part of P2770R0) (#4264)
This commit is contained in:
Родитель
90691c1800
Коммит
c21ba55e4c
|
@ -3809,9 +3809,7 @@ namespace ranges {
|
|||
using value_type = range_value_t<_InnerRng<_Const>>;
|
||||
using difference_type = common_type_t<range_difference_t<_Base>, range_difference_t<_InnerRng<_Const>>>;
|
||||
|
||||
// clang-format off
|
||||
_Iterator() requires default_initializable<_OuterIter> = default;
|
||||
// clang-format on
|
||||
_Iterator() = default;
|
||||
|
||||
constexpr _Iterator(_Iterator<!_Const> _It)
|
||||
requires _Const && convertible_to<iterator_t<_Vw>, _OuterIter>
|
||||
|
@ -4265,9 +4263,7 @@ namespace ranges {
|
|||
using value_type = common_type_t<iter_value_t<_InnerIter>, iter_value_t<_PatternIter>>;
|
||||
using difference_type = _Common_diff_t<_OuterIter, _InnerIter, _PatternIter>;
|
||||
|
||||
// clang-format off
|
||||
_Iterator() requires default_initializable<_OuterIter> = default;
|
||||
// clang-format on
|
||||
_Iterator() = default;
|
||||
|
||||
constexpr _Iterator(_Iterator<!_Const> _It)
|
||||
requires _Const && convertible_to<iterator_t<_Vw>, _OuterIter>
|
||||
|
|
|
@ -1202,9 +1202,6 @@ std/ranges/range.adaptors/range.join/range.join.iterator/star.pass.cpp:0 FAIL
|
|||
# Not analyzed. constexpr evaluation fails in ranges::swap.
|
||||
std/ranges/range.adaptors/range.join/range.join.iterator/iter.swap.pass.cpp:0 FAIL
|
||||
|
||||
# Not analyzed. Fails static_assert(std::is_default_constructible_v<JoinIterator>).
|
||||
std/ranges/range.adaptors/range.join/range.join.iterator/ctor.default.pass.cpp FAIL
|
||||
|
||||
# Not analyzed. constexpr evaluation fails in assert(element_moved == 1).
|
||||
std/ranges/range.adaptors/range.lazy.split/ctor.range.pass.cpp:0 FAIL
|
||||
std/ranges/range.adaptors/range.split/ctor.range.pass.cpp:0 FAIL
|
||||
|
|
|
@ -177,6 +177,16 @@ constexpr bool test_one(Outer&& rng, Expected&& expected) {
|
|||
}
|
||||
}
|
||||
|
||||
// Also validate that join_view iterators are default-constructible
|
||||
{
|
||||
STATIC_ASSERT(is_default_constructible_v<iterator_t<R>>);
|
||||
[[maybe_unused]] iterator_t<R> i;
|
||||
if constexpr (CanMemberBegin<const R>) {
|
||||
STATIC_ASSERT(is_default_constructible_v<iterator_t<const R>>);
|
||||
[[maybe_unused]] iterator_t<const R> ci;
|
||||
}
|
||||
}
|
||||
|
||||
// Validate join_view::end
|
||||
static_assert(CanMemberEnd<R>);
|
||||
static_assert(CanMemberEnd<const R>
|
||||
|
|
|
@ -219,6 +219,16 @@ constexpr void test_one(Outer&& rng, Delimiter&& delimiter, Expected&& expected)
|
|||
}
|
||||
}
|
||||
|
||||
// Also validate that join_with_view iterators are default-constructible
|
||||
{
|
||||
STATIC_ASSERT(is_default_constructible_v<iterator_t<R>>);
|
||||
[[maybe_unused]] iterator_t<R> i;
|
||||
if constexpr (CanMemberBegin<const R>) {
|
||||
STATIC_ASSERT(is_default_constructible_v<iterator_t<const R>>);
|
||||
[[maybe_unused]] iterator_t<const R> ci;
|
||||
}
|
||||
}
|
||||
|
||||
// Validate join_with_view::end
|
||||
static_assert(CanMemberEnd<R>);
|
||||
static_assert(CanMemberEnd<const R>
|
||||
|
|
Загрузка…
Ссылка в новой задаче