forked from OSchip/llvm-project
[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
This commit is contained in:
parent
e494278cee
commit
cfe17986c9
|
@ -42,7 +42,7 @@ struct ToIter {
|
|||
typedef char *pointer;
|
||||
typedef char &reference;
|
||||
typedef char value_type;
|
||||
typedef value_type difference_type;
|
||||
typedef signed char difference_type;
|
||||
|
||||
explicit TEST_CONSTEXPR_CXX17 ToIter() : m_value(0) {}
|
||||
TEST_CONSTEXPR_CXX17 ToIter(const ToIter &src) : m_value(src.m_value) {}
|
||||
|
@ -57,6 +57,8 @@ struct ToIter {
|
|||
return *this;
|
||||
}
|
||||
char *m_value;
|
||||
|
||||
reference operator*() const;
|
||||
};
|
||||
|
||||
TEST_CONSTEXPR_CXX17 bool test_conv_assign()
|
||||
|
|
|
@ -42,6 +42,8 @@ struct Iter {
|
|||
|
||||
constexpr Iter(double value): m_value(value) {}
|
||||
double m_value;
|
||||
|
||||
reference operator*() const;
|
||||
private:
|
||||
friend constexpr bool operator==(const Iter& l, const Iter& r) = default;
|
||||
friend constexpr std::partial_ordering operator<=>(const Iter& l, const Iter& r) = default;
|
||||
|
@ -57,6 +59,8 @@ struct ConstIter {
|
|||
constexpr ConstIter(double value): m_value(value) {}
|
||||
constexpr ConstIter(Iter it): m_value(it.m_value) {}
|
||||
double m_value;
|
||||
|
||||
reference operator*() const;
|
||||
private:
|
||||
friend constexpr bool operator==(const ConstIter& l, const ConstIter& r) = default;
|
||||
friend constexpr std::partial_ordering operator<=>(const ConstIter& l, const ConstIter& r) = default;
|
||||
|
|
|
@ -51,6 +51,8 @@ struct ToIter {
|
|||
return *this;
|
||||
}
|
||||
char *m_value;
|
||||
|
||||
reference operator*() const;
|
||||
};
|
||||
|
||||
TEST_CONSTEXPR_CXX17 bool tests() {
|
||||
|
|
Loading…
Reference in New Issue