1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef TEST_SUPPORT_ITERATOR_TRAITS_ITERATOR_TRAITS_CPP17_ITERATORS 10 #define TEST_SUPPORT_ITERATOR_TRAITS_ITERATOR_TRAITS_CPP17_ITERATORS 11 12 struct iterator_traits_cpp17_iterator { 13 int& operator*(); 14 iterator_traits_cpp17_iterator& operator++(); 15 iterator_traits_cpp17_iterator operator++(int); 16 }; 17 18 struct iterator_traits_cpp17_proxy_iterator { 19 int operator*(); 20 iterator_traits_cpp17_proxy_iterator& operator++(); 21 22 // this returns legacy_iterator, not iterator_traits_cpp17_proxy_iterator 23 iterator_traits_cpp17_iterator operator++(int); 24 }; 25 26 struct iterator_traits_cpp17_input_iterator { 27 using difference_type = int; 28 using value_type = long; 29 30 int& operator*(); 31 iterator_traits_cpp17_input_iterator& operator++(); 32 iterator_traits_cpp17_input_iterator operator++(int); 33 34 bool operator==(iterator_traits_cpp17_input_iterator const&) const; 35 }; 36 37 struct iterator_traits_cpp17_proxy_input_iterator { 38 using difference_type = int; 39 using value_type = long; 40 41 int operator*(); 42 iterator_traits_cpp17_proxy_input_iterator& operator++(); 43 44 // this returns legacy_input_iterator, not iterator_traits_cpp17_proxy_input_iterator 45 iterator_traits_cpp17_input_iterator operator++(int); 46 47 bool operator==(iterator_traits_cpp17_proxy_input_iterator const&) const; 48 }; 49 50 struct iterator_traits_cpp17_forward_iterator { 51 using difference_type = int; 52 using value_type = int; 53 54 int& operator*(); 55 iterator_traits_cpp17_forward_iterator& operator++(); 56 iterator_traits_cpp17_forward_iterator operator++(int); 57 58 bool operator==(iterator_traits_cpp17_forward_iterator const&) const; 59 }; 60 61 struct iterator_traits_cpp17_bidirectional_iterator { 62 using difference_type = int; 63 using value_type = int; 64 65 int& operator*(); 66 iterator_traits_cpp17_bidirectional_iterator& operator++(); 67 iterator_traits_cpp17_bidirectional_iterator operator++(int); 68 iterator_traits_cpp17_bidirectional_iterator& operator--(); 69 iterator_traits_cpp17_bidirectional_iterator operator--(int); 70 71 bool operator==(iterator_traits_cpp17_bidirectional_iterator const&) const; 72 }; 73 74 struct iterator_traits_cpp17_random_access_iterator { 75 using difference_type = int; 76 using value_type = int; 77 78 int& operator*(); 79 int& operator[](difference_type); 80 iterator_traits_cpp17_random_access_iterator& operator++(); 81 iterator_traits_cpp17_random_access_iterator operator++(int); 82 iterator_traits_cpp17_random_access_iterator& operator--(); 83 iterator_traits_cpp17_random_access_iterator operator--(int); 84 85 bool operator==(iterator_traits_cpp17_random_access_iterator const&) const; 86 bool operator<(iterator_traits_cpp17_random_access_iterator const&) const; 87 bool operator>(iterator_traits_cpp17_random_access_iterator const&) const; 88 bool operator<=(iterator_traits_cpp17_random_access_iterator const&) const; 89 bool operator>=(iterator_traits_cpp17_random_access_iterator const&) const; 90 91 iterator_traits_cpp17_random_access_iterator& operator+=(difference_type); 92 iterator_traits_cpp17_random_access_iterator& operator-=(difference_type); 93 94 friend iterator_traits_cpp17_random_access_iterator operator+(iterator_traits_cpp17_random_access_iterator, 95 difference_type); 96 friend iterator_traits_cpp17_random_access_iterator operator+(difference_type, 97 iterator_traits_cpp17_random_access_iterator); 98 friend iterator_traits_cpp17_random_access_iterator operator-(iterator_traits_cpp17_random_access_iterator, 99 difference_type); 100 friend difference_type operator-(iterator_traits_cpp17_random_access_iterator, 101 iterator_traits_cpp17_random_access_iterator); 102 }; 103 104 #endif // TEST_SUPPORT_ITERATOR_TRAITS_ITERATOR_TRAITS_CPP17_ITERATORS 105