1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 // <iterator>
11 
12 // reverse_iterator
13 
14 // template <class U>
15 //   requires HasAssign<Iter, const U&>
16 //   reverse_iterator&
17 //   operator=(const reverse_iterator<U>& u);
18 
19 #include <iterator>
20 #include <cassert>
21 
22 #include "test_iterators.h"
23 
24 template <class It, class U>
25 void
test(U u)26 test(U u)
27 {
28     const std::reverse_iterator<U> r2(u);
29     std::reverse_iterator<It> r1;
30     std::reverse_iterator<It>& rr = r1 = r2;
31     assert(r1.base() == u);
32     assert(&rr == &r1);
33 }
34 
35 struct Base {};
36 struct Derived : Base {};
37 
main()38 int main()
39 {
40     Derived d;
41 
42     test<bidirectional_iterator<Base*> >(bidirectional_iterator<Derived*>(&d));
43     test<random_access_iterator<const Base*> >(random_access_iterator<Derived*>(&d));
44     test<Base*>(&d);
45 }
46