-
Notifications
You must be signed in to change notification settings - Fork 11.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[libcxx] adds
cpp17-.*iterator
concepts for iterator_traits
The `iterator_traits` patch became too large for a concise review, so the "bloat" —as it were— was moved into this patch. Also tests most C++[98,17] iterator types to confirm backwards compatibility is successful (regex iterators are intentionally not present, but directory iterators are due to a peculiar error encountered while patching `iterator_traits`). Depends on D99461. Differential Revision: https://reviews.llvm.org/D99854
- Loading branch information
Showing
9 changed files
with
1,125 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
104 changes: 104 additions & 0 deletions
104
...rator.requirements/iterator.assoc.types/iterator.traits/iterator_traits_cpp17_iterators.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef TEST_LIBCXX_ITERATORS_ITERATOR_REQUIREMENTS_ITERATOR_ASSOC_TYPES_ITERATOR_TRAITS_ITERATOR_TRAITS_CPP17_ITERATORS | ||
#define TEST_LIBCXX_ITERATORS_ITERATOR_REQUIREMENTS_ITERATOR_ASSOC_TYPES_ITERATOR_TRAITS_ITERATOR_TRAITS_CPP17_ITERATORS | ||
|
||
struct iterator_traits_cpp17_iterator { | ||
int& operator*(); | ||
iterator_traits_cpp17_iterator& operator++(); | ||
iterator_traits_cpp17_iterator operator++(int); | ||
}; | ||
|
||
struct iterator_traits_cpp17_proxy_iterator { | ||
int operator*(); | ||
iterator_traits_cpp17_proxy_iterator& operator++(); | ||
|
||
// this returns legcay_iterator, not iterator_traits_cpp17_proxy_iterator | ||
iterator_traits_cpp17_iterator operator++(int); | ||
}; | ||
|
||
struct iterator_traits_cpp17_input_iterator { | ||
using difference_type = int; | ||
using value_type = long; | ||
|
||
int& operator*(); | ||
iterator_traits_cpp17_input_iterator& operator++(); | ||
iterator_traits_cpp17_input_iterator operator++(int); | ||
|
||
bool operator==(iterator_traits_cpp17_input_iterator const&) const; | ||
}; | ||
|
||
struct iterator_traits_cpp17_proxy_input_iterator { | ||
using difference_type = int; | ||
using value_type = long; | ||
|
||
int operator*(); | ||
iterator_traits_cpp17_proxy_input_iterator& operator++(); | ||
|
||
// this returns legcay_input_iterator, not iterator_traits_cpp17_proxy_input_iterator | ||
iterator_traits_cpp17_input_iterator operator++(int); | ||
|
||
bool operator==(iterator_traits_cpp17_proxy_input_iterator const&) const; | ||
}; | ||
|
||
struct iterator_traits_cpp17_forward_iterator { | ||
using difference_type = int; | ||
using value_type = int; | ||
|
||
int& operator*(); | ||
iterator_traits_cpp17_forward_iterator& operator++(); | ||
iterator_traits_cpp17_forward_iterator operator++(int); | ||
|
||
bool operator==(iterator_traits_cpp17_forward_iterator const&) const; | ||
}; | ||
|
||
struct iterator_traits_cpp17_bidirectional_iterator { | ||
using difference_type = int; | ||
using value_type = int; | ||
|
||
int& operator*(); | ||
iterator_traits_cpp17_bidirectional_iterator& operator++(); | ||
iterator_traits_cpp17_bidirectional_iterator operator++(int); | ||
iterator_traits_cpp17_bidirectional_iterator& operator--(); | ||
iterator_traits_cpp17_bidirectional_iterator operator--(int); | ||
|
||
bool operator==(iterator_traits_cpp17_bidirectional_iterator const&) const; | ||
}; | ||
|
||
struct iterator_traits_cpp17_random_access_iterator { | ||
using difference_type = int; | ||
using value_type = int; | ||
|
||
int& operator*(); | ||
int& operator[](difference_type); | ||
iterator_traits_cpp17_random_access_iterator& operator++(); | ||
iterator_traits_cpp17_random_access_iterator operator++(int); | ||
iterator_traits_cpp17_random_access_iterator& operator--(); | ||
iterator_traits_cpp17_random_access_iterator operator--(int); | ||
|
||
bool operator==(iterator_traits_cpp17_random_access_iterator const&) const; | ||
bool operator<(iterator_traits_cpp17_random_access_iterator const&) const; | ||
bool operator>(iterator_traits_cpp17_random_access_iterator const&) const; | ||
bool operator<=(iterator_traits_cpp17_random_access_iterator const&) const; | ||
bool operator>=(iterator_traits_cpp17_random_access_iterator const&) const; | ||
|
||
iterator_traits_cpp17_random_access_iterator& operator+=(difference_type); | ||
iterator_traits_cpp17_random_access_iterator& operator-=(difference_type); | ||
|
||
friend iterator_traits_cpp17_random_access_iterator operator+(iterator_traits_cpp17_random_access_iterator, | ||
difference_type); | ||
friend iterator_traits_cpp17_random_access_iterator operator+(difference_type, | ||
iterator_traits_cpp17_random_access_iterator); | ||
friend iterator_traits_cpp17_random_access_iterator operator-(iterator_traits_cpp17_random_access_iterator, | ||
difference_type); | ||
friend difference_type operator-(iterator_traits_cpp17_random_access_iterator, | ||
iterator_traits_cpp17_random_access_iterator); | ||
}; | ||
|
||
#endif // TEST_LIBCXX_ITERATORS_ITERATOR_REQUIREMENTS_ITERATOR_ASSOC_TYPES_ITERATOR_TRAITS_ITERATOR_TRAITS_CPP17_ITERATORS |
Oops, something went wrong.