: public iterator_facade_base<
enumerator_iter<R>, std::forward_iterator_tag, result_pair<R>,
typename std::iterator_traits<IterOfRange<R>>::difference_type,
- typename std::iterator_traits<IterOfRange<R>>::pointer> {
+ typename std::iterator_traits<IterOfRange<R>>::pointer,
+ typename std::iterator_traits<IterOfRange<R>>::reference> {
using result_type = result_pair<R>;
public:
return LHS.I < RHS.I;
}
- const ReferenceT operator*() const { return *I; }
- ReferenceT operator*() { return *I; }
+ ReferenceT operator*() const { return *I; }
};
/// An iterator type that allows iterating over the pointees via some
EXPECT_EQ((SmallVector<int, 3>{1, 3, 5}), Actual);
}
-TEST(FilterIteratorTest, Enumerate) {
- auto IsOdd = [](auto N) { return N.value() % 2 == 1; };
- int A[] = {0, 1, 2, 3, 4, 5, 6};
- auto Enumerate = llvm::enumerate(A);
- SmallVector<int> Actual;
- for (auto IndexedValue : make_filter_range(Enumerate, IsOdd))
- Actual.push_back(IndexedValue.value());
- EXPECT_EQ((SmallVector<int, 3>{1, 3, 5}), Actual);
-}
-
TEST(FilterIteratorTest, CallableObject) {
int Counter = 0;
struct Callable {