Differential D102639 Diff 345997 libcxx/test/std/containers/associative/map/iterator_concept_conformance.compile.pass.cpp
Changeset View
Changeset View
Standalone View
Standalone View
libcxx/test/std/containers/associative/map/iterator_concept_conformance.compile.pass.cpp
Show All 27 Lines | ||||||||||||||||||
static_assert(std::sentinel_for<iterator, iterator>); | static_assert(std::sentinel_for<iterator, iterator>); | |||||||||||||||||
static_assert(std::sentinel_for<iterator, const_iterator>); | static_assert(std::sentinel_for<iterator, const_iterator>); | |||||||||||||||||
static_assert(!std::sentinel_for<iterator, reverse_iterator>); | static_assert(!std::sentinel_for<iterator, reverse_iterator>); | |||||||||||||||||
static_assert(!std::sentinel_for<iterator, const_reverse_iterator>); | static_assert(!std::sentinel_for<iterator, const_reverse_iterator>); | |||||||||||||||||
static_assert(!std::sized_sentinel_for<iterator, iterator>); | static_assert(!std::sized_sentinel_for<iterator, iterator>); | |||||||||||||||||
static_assert(!std::sized_sentinel_for<iterator, const_iterator>); | static_assert(!std::sized_sentinel_for<iterator, const_iterator>); | |||||||||||||||||
static_assert(!std::sized_sentinel_for<iterator, reverse_iterator>); | static_assert(!std::sized_sentinel_for<iterator, reverse_iterator>); | |||||||||||||||||
static_assert(!std::sized_sentinel_for<iterator, const_reverse_iterator>); | static_assert(!std::sized_sentinel_for<iterator, const_reverse_iterator>); | |||||||||||||||||
static_assert(!std::indirectly_movable<iterator, iterator>); | ||||||||||||||||||
static_assert(!std::indirectly_movable_storable<iterator, iterator>); | ||||||||||||||||||
ldionne: Is this because `iterator::value_type` is `std::pair<int const, int>` and not `std::pair<int… | ||||||||||||||||||
Per offline discussion, I think this should be using value_type* instead of pair<int, int>*. ldionne: Per offline discussion, I think this should be using `value_type*` instead of `pair<int, int>*`. | ||||||||||||||||||
The reason this doesn't use value_type is because it's not assignable-to. In this case value_type is pair<const int, int> which we can't assign pair<const int, int> to. But we can assign pair<const int, int> to pair<int, int> so, we use that instead (because that's the only use-case where this would succeed). zoecarver: The reason this doesn't use value_type is because it's not assignable-to. In this case… | ||||||||||||||||||
static_assert(!std::indirectly_movable<iterator, const_iterator>); | ||||||||||||||||||
static_assert(!std::indirectly_movable_storable<iterator, const_iterator>); | ||||||||||||||||||
static_assert(!std::indirectly_movable<iterator, reverse_iterator>); | ||||||||||||||||||
static_assert(!std::indirectly_movable_storable<iterator, reverse_iterator>); | ||||||||||||||||||
static_assert(!std::indirectly_movable<iterator, const_reverse_iterator>); | ||||||||||||||||||
static_assert(!std::indirectly_movable_storable<iterator, const_reverse_iterator>); | ||||||||||||||||||
cjdbUnsubmitted
If an iterator isn't indirectly_writable, then it doesn't need to be on the RHS of this test. cjdb: If an iterator isn't `indirectly_writable`, then it doesn't need to be on the RHS of this test. | ||||||||||||||||||
static_assert(std::bidirectional_iterator<const_iterator>); | static_assert(std::bidirectional_iterator<const_iterator>); | |||||||||||||||||
static_assert(!std::random_access_iterator<const_iterator>); | static_assert(!std::random_access_iterator<const_iterator>); | |||||||||||||||||
static_assert(!std::indirectly_writable<const_iterator, value_type>); | static_assert(!std::indirectly_writable<const_iterator, value_type>); | |||||||||||||||||
static_assert(std::sentinel_for<const_iterator, iterator>); | static_assert(std::sentinel_for<const_iterator, iterator>); | |||||||||||||||||
static_assert(std::sentinel_for<const_iterator, const_iterator>); | static_assert(std::sentinel_for<const_iterator, const_iterator>); | |||||||||||||||||
static_assert(!std::sentinel_for<const_iterator, reverse_iterator>); | static_assert(!std::sentinel_for<const_iterator, reverse_iterator>); | |||||||||||||||||
static_assert(!std::sentinel_for<const_iterator, const_reverse_iterator>); | static_assert(!std::sentinel_for<const_iterator, const_reverse_iterator>); | |||||||||||||||||
static_assert(!std::sized_sentinel_for<const_iterator, iterator>); | static_assert(!std::sized_sentinel_for<const_iterator, iterator>); | |||||||||||||||||
static_assert(!std::sized_sentinel_for<const_iterator, const_iterator>); | static_assert(!std::sized_sentinel_for<const_iterator, const_iterator>); | |||||||||||||||||
static_assert(!std::sized_sentinel_for<const_iterator, reverse_iterator>); | static_assert(!std::sized_sentinel_for<const_iterator, reverse_iterator>); | |||||||||||||||||
static_assert(!std::sized_sentinel_for<const_iterator, const_reverse_iterator>); | static_assert(!std::sized_sentinel_for<const_iterator, const_reverse_iterator>); | |||||||||||||||||
static_assert(!std::indirectly_movable<const_iterator, iterator>); | ||||||||||||||||||
static_assert(!std::indirectly_movable_storable<const_iterator, iterator>); | ||||||||||||||||||
static_assert(!std::indirectly_movable<const_iterator, const_iterator>); | ||||||||||||||||||
static_assert(!std::indirectly_movable_storable<const_iterator, const_iterator>); | ||||||||||||||||||
static_assert(!std::indirectly_movable<const_iterator, reverse_iterator>); | ||||||||||||||||||
static_assert(!std::indirectly_movable_storable<const_iterator, reverse_iterator>); | ||||||||||||||||||
static_assert(!std::indirectly_movable<const_iterator, const_reverse_iterator>); | ||||||||||||||||||
static_assert(!std::indirectly_movable_storable<const_iterator, const_reverse_iterator>); |
Is this because iterator::value_type is std::pair<int const, int> and not std::pair<int, int>?