130660a898545416f0fea2d717f16f75640001e38Ted Kremenek//===----------------------------------------------------------------------===//
230660a898545416f0fea2d717f16f75640001e38Ted Kremenek//
330660a898545416f0fea2d717f16f75640001e38Ted Kremenek//                     The LLVM Compiler Infrastructure
430660a898545416f0fea2d717f16f75640001e38Ted Kremenek//
530660a898545416f0fea2d717f16f75640001e38Ted Kremenek// This file is dual licensed under the MIT and the University of Illinois Open
630660a898545416f0fea2d717f16f75640001e38Ted Kremenek// Source Licenses. See LICENSE.TXT for details.
730660a898545416f0fea2d717f16f75640001e38Ted Kremenek//
830660a898545416f0fea2d717f16f75640001e38Ted Kremenek//===----------------------------------------------------------------------===//
930660a898545416f0fea2d717f16f75640001e38Ted Kremenek
1030660a898545416f0fea2d717f16f75640001e38Ted Kremenek// <iterator>
1130660a898545416f0fea2d717f16f75640001e38Ted Kremenek
1230660a898545416f0fea2d717f16f75640001e38Ted Kremenek// move_iterator
1330660a898545416f0fea2d717f16f75640001e38Ted Kremenek
1430660a898545416f0fea2d717f16f75640001e38Ted Kremenek// requires RandomAccessIterator<Iter>
1530a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth//   move_iterator& operator-=(difference_type n);
161921b58a2aba4f5073d6634d476356b6a4ff8815Fariborz Jahanian
1730660a898545416f0fea2d717f16f75640001e38Ted Kremenek#include <iterator>
1830660a898545416f0fea2d717f16f75640001e38Ted Kremenek#include <cassert>
1930660a898545416f0fea2d717f16f75640001e38Ted Kremenek
2037ed12720a35b7bfa1c4de73ad6f1c6c1c88ee17Argyrios Kyrtzidis#include "test_iterators.h"
2130660a898545416f0fea2d717f16f75640001e38Ted Kremenek
2230660a898545416f0fea2d717f16f75640001e38Ted Kremenektemplate <class It>
2330660a898545416f0fea2d717f16f75640001e38Ted Kremenekvoid
2430660a898545416f0fea2d717f16f75640001e38Ted Kremenektest(It i, typename std::iterator_traits<It>::difference_type n, It x)
2530660a898545416f0fea2d717f16f75640001e38Ted Kremenek{
2630660a898545416f0fea2d717f16f75640001e38Ted Kremenek    std::move_iterator<It> r(i);
2730660a898545416f0fea2d717f16f75640001e38Ted Kremenek    std::move_iterator<It>& rr = r -= n;
2830660a898545416f0fea2d717f16f75640001e38Ted Kremenek    assert(r.base() == x);
2930660a898545416f0fea2d717f16f75640001e38Ted Kremenek    assert(&rr == &r);
3030660a898545416f0fea2d717f16f75640001e38Ted Kremenek}
3130660a898545416f0fea2d717f16f75640001e38Ted Kremenek
3230660a898545416f0fea2d717f16f75640001e38Ted Kremenekint main()
3330660a898545416f0fea2d717f16f75640001e38Ted Kremenek{
3430660a898545416f0fea2d717f16f75640001e38Ted Kremenek    const char* s = "1234567890";
3530660a898545416f0fea2d717f16f75640001e38Ted Kremenek    test(random_access_iterator<const char*>(s+5), 5, random_access_iterator<const char*>(s));
3630660a898545416f0fea2d717f16f75640001e38Ted Kremenek    test(s+5, 5, s);
3730660a898545416f0fea2d717f16f75640001e38Ted Kremenek}
3830660a898545416f0fea2d717f16f75640001e38Ted Kremenek