Skip to content

Commit cfe1798

Browse files
committed
[libcxx][test] {move,reverse}_iterator cannot be instantiated for a type with no operator*
Since their nested reference types are defined in terms of `iter_reference_t<T>`, which examines `decltype(*declval<T>())`. Differential Revision: https://reviews.llvm.org/D117371
1 parent e494278 commit cfe1798

File tree

3 files changed

+9
-1
lines changed

3 files changed

+9
-1
lines changed

libcxx/test/std/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op=/move_iterator.pass.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ struct ToIter {
4242
typedef char *pointer;
4343
typedef char &reference;
4444
typedef char value_type;
45-
typedef value_type difference_type;
45+
typedef signed char difference_type;
4646

4747
explicit TEST_CONSTEXPR_CXX17 ToIter() : m_value(0) {}
4848
TEST_CONSTEXPR_CXX17 ToIter(const ToIter &src) : m_value(src.m_value) {}
@@ -57,6 +57,8 @@ struct ToIter {
5757
return *this;
5858
}
5959
char *m_value;
60+
61+
reference operator*() const;
6062
};
6163

6264
TEST_CONSTEXPR_CXX17 bool test_conv_assign()

libcxx/test/std/iterators/predef.iterators/reverse.iterators/reverse.iter.cmp/three-way.pass.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ struct Iter {
4242

4343
constexpr Iter(double value): m_value(value) {}
4444
double m_value;
45+
46+
reference operator*() const;
4547
private:
4648
friend constexpr bool operator==(const Iter& l, const Iter& r) = default;
4749
friend constexpr std::partial_ordering operator<=>(const Iter& l, const Iter& r) = default;
@@ -57,6 +59,8 @@ struct ConstIter {
5759
constexpr ConstIter(double value): m_value(value) {}
5860
constexpr ConstIter(Iter it): m_value(it.m_value) {}
5961
double m_value;
62+
63+
reference operator*() const;
6064
private:
6165
friend constexpr bool operator==(const ConstIter& l, const ConstIter& r) = default;
6266
friend constexpr std::partial_ordering operator<=>(const ConstIter& l, const ConstIter& r) = default;

libcxx/test/std/iterators/predef.iterators/reverse.iterators/reverse.iter.cons/assign.pass.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ struct ToIter {
5151
return *this;
5252
}
5353
char *m_value;
54+
55+
reference operator*() const;
5456
};
5557

5658
TEST_CONSTEXPR_CXX17 bool tests() {

0 commit comments

Comments
 (0)