Index: include/llvm/ADT/iterator_range.h =================================================================== --- include/llvm/ADT/iterator_range.h +++ include/llvm/ADT/iterator_range.h @@ -59,9 +59,10 @@ return iterator_range(std::move(p.first), std::move(p.second)); } -template -iterator_range()))> drop_begin(T &&t, int n) { - return make_range(std::next(begin(t), n), end(t)); +template +iterator_range()))> drop_begin(T &&t, + int n) { + return make_range(std::next(std::begin(t), n), std::end(t)); } } Index: unittests/ADT/IteratorTest.cpp =================================================================== --- unittests/ADT/IteratorTest.cpp +++ unittests/ADT/IteratorTest.cpp @@ -373,4 +373,17 @@ EXPECT_EQ(std::distance(v2.begin(), v2.end()), size(v2)); } +TEST(IteratorRangeTest, DropBegin) { + SmallVector vec{0, 1, 2, 3, 4}; + + for (int n = 0; n < 5; ++n) { + int i = n; + for (auto &v : drop_begin(vec, n)) { + EXPECT_EQ(v, i); + i += 1; + } + EXPECT_EQ(i, 5); + } +} + } // anonymous namespace