Skip to content

Commit aef92a8

Browse files
committed
[libc++][iterator] Applied [[nodiscard]]
Towards #172124
1 parent 8d5ade8 commit aef92a8

File tree

9 files changed

+218
-60
lines changed

9 files changed

+218
-60
lines changed

libcxx/include/__iterator/access.h

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,47 +20,49 @@
2020
_LIBCPP_BEGIN_NAMESPACE_STD
2121

2222
template <class _Tp, size_t _Np>
23-
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _Tp* begin(_Tp (&__array)[_Np]) _NOEXCEPT {
23+
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _Tp* begin(_Tp (&__array)[_Np]) _NOEXCEPT {
2424
return __array;
2525
}
2626

2727
template <class _Tp, size_t _Np>
28-
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _Tp* end(_Tp (&__array)[_Np]) _NOEXCEPT {
28+
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _Tp* end(_Tp (&__array)[_Np]) _NOEXCEPT {
2929
return __array + _Np;
3030
}
3131

3232
#if !defined(_LIBCPP_CXX03_LANG)
3333

3434
template <class _Cp>
35-
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 auto begin(_Cp& __c) -> decltype(__c.begin()) {
35+
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 auto begin(_Cp& __c) -> decltype(__c.begin()) {
3636
return __c.begin();
3737
}
3838

3939
template <class _Cp>
40-
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 auto begin(const _Cp& __c) -> decltype(__c.begin()) {
40+
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 auto begin(const _Cp& __c)
41+
-> decltype(__c.begin()) {
4142
return __c.begin();
4243
}
4344

4445
template <class _Cp>
45-
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 auto end(_Cp& __c) -> decltype(__c.end()) {
46+
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 auto end(_Cp& __c) -> decltype(__c.end()) {
4647
return __c.end();
4748
}
4849

4950
template <class _Cp>
50-
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 auto end(const _Cp& __c) -> decltype(__c.end()) {
51+
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 auto end(const _Cp& __c) -> decltype(__c.end()) {
5152
return __c.end();
5253
}
5354

5455
# if _LIBCPP_STD_VER >= 14
5556

5657
template <class _Cp>
57-
_LIBCPP_HIDE_FROM_ABI constexpr auto
58-
cbegin(const _Cp& __c) noexcept(noexcept(std::begin(__c))) -> decltype(std::begin(__c)) {
58+
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr auto cbegin(const _Cp& __c) noexcept(noexcept(std::begin(__c)))
59+
-> decltype(std::begin(__c)) {
5960
return std::begin(__c);
6061
}
6162

6263
template <class _Cp>
63-
_LIBCPP_HIDE_FROM_ABI constexpr auto cend(const _Cp& __c) noexcept(noexcept(std::end(__c))) -> decltype(std::end(__c)) {
64+
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr auto cend(const _Cp& __c) noexcept(noexcept(std::end(__c)))
65+
-> decltype(std::end(__c)) {
6466
return std::end(__c);
6567
}
6668

@@ -69,22 +71,22 @@ _LIBCPP_HIDE_FROM_ABI constexpr auto cend(const _Cp& __c) noexcept(noexcept(std:
6971
#else // defined(_LIBCPP_CXX03_LANG)
7072

7173
template <class _Cp>
72-
_LIBCPP_HIDE_FROM_ABI typename _Cp::iterator begin(_Cp& __c) {
74+
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI typename _Cp::iterator begin(_Cp& __c) {
7375
return __c.begin();
7476
}
7577

7678
template <class _Cp>
77-
_LIBCPP_HIDE_FROM_ABI typename _Cp::const_iterator begin(const _Cp& __c) {
79+
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI typename _Cp::const_iterator begin(const _Cp& __c) {
7880
return __c.begin();
7981
}
8082

8183
template <class _Cp>
82-
_LIBCPP_HIDE_FROM_ABI typename _Cp::iterator end(_Cp& __c) {
84+
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI typename _Cp::iterator end(_Cp& __c) {
8385
return __c.end();
8486
}
8587

8688
template <class _Cp>
87-
_LIBCPP_HIDE_FROM_ABI typename _Cp::const_iterator end(const _Cp& __c) {
89+
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI typename _Cp::const_iterator end(const _Cp& __c) {
8890
return __c.end();
8991
}
9092

libcxx/include/__iterator/back_insert_iterator.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@ class back_insert_iterator
5858
return *this;
5959
}
6060
#endif // _LIBCPP_CXX03_LANG
61-
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 back_insert_iterator& operator*() { return *this; }
61+
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 back_insert_iterator& operator*() {
62+
return *this;
63+
}
6264
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 back_insert_iterator& operator++() { return *this; }
6365
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 back_insert_iterator operator++(int) { return *this; }
6466

libcxx/include/__iterator/bounded_iter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ struct pointer_traits<__bounded_iter<_Iterator> > {
280280
using element_type = typename pointer_traits<_Iterator>::element_type;
281281
using difference_type = typename pointer_traits<_Iterator>::difference_type;
282282

283-
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR static element_type* to_address(pointer __it) _NOEXCEPT {
283+
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR static element_type* to_address(pointer __it) _NOEXCEPT {
284284
return std::__to_address(__it.__current_);
285285
}
286286
};

libcxx/include/__iterator/common_iterator.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ class common_iterator {
111111
return *this;
112112
}
113113

114-
_LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator*() {
114+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator*() {
115115
_LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
116116
std::holds_alternative<_Iter>(__hold_), "Attempted to dereference a non-dereferenceable common_iterator");
117117
return *std::__unchecked_get<_Iter>(__hold_);

libcxx/include/__iterator/counted_iterator.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -98,18 +98,18 @@ class counted_iterator
9898
return *this;
9999
}
100100

101-
_LIBCPP_HIDE_FROM_ABI constexpr const _Iter& base() const& noexcept { return __current_; }
101+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const _Iter& base() const& noexcept { return __current_; }
102102

103-
_LIBCPP_HIDE_FROM_ABI constexpr _Iter base() && { return std::move(__current_); }
103+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Iter base() && { return std::move(__current_); }
104104

105-
_LIBCPP_HIDE_FROM_ABI constexpr iter_difference_t<_Iter> count() const noexcept { return __count_; }
105+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr iter_difference_t<_Iter> count() const noexcept { return __count_; }
106106

107-
_LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator*() {
107+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator*() {
108108
_LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(__count_ > 0, "Iterator is equal to or past end.");
109109
return *__current_;
110110
}
111111

112-
_LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator*() const
112+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator*() const
113113
requires __dereferenceable<const _Iter>
114114
{
115115
_LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(__count_ > 0, "Iterator is equal to or past end.");
@@ -169,13 +169,13 @@ class counted_iterator
169169
return __tmp;
170170
}
171171

172-
_LIBCPP_HIDE_FROM_ABI constexpr counted_iterator operator+(iter_difference_t<_Iter> __n) const
172+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr counted_iterator operator+(iter_difference_t<_Iter> __n) const
173173
requires random_access_iterator<_Iter>
174174
{
175175
return counted_iterator(__current_ + __n, __count_ - __n);
176176
}
177177

178-
_LIBCPP_HIDE_FROM_ABI friend constexpr counted_iterator
178+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr counted_iterator
179179
operator+(iter_difference_t<_Iter> __n, const counted_iterator& __x)
180180
requires random_access_iterator<_Iter>
181181
{
@@ -191,24 +191,24 @@ class counted_iterator
191191
return *this;
192192
}
193193

194-
_LIBCPP_HIDE_FROM_ABI constexpr counted_iterator operator-(iter_difference_t<_Iter> __n) const
194+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr counted_iterator operator-(iter_difference_t<_Iter> __n) const
195195
requires random_access_iterator<_Iter>
196196
{
197197
return counted_iterator(__current_ - __n, __count_ + __n);
198198
}
199199

200200
template <common_with<_Iter> _I2>
201-
_LIBCPP_HIDE_FROM_ABI friend constexpr iter_difference_t<_I2>
201+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr iter_difference_t<_I2>
202202
operator-(const counted_iterator& __lhs, const counted_iterator<_I2>& __rhs) {
203203
return __rhs.__count_ - __lhs.__count_;
204204
}
205205

206-
_LIBCPP_HIDE_FROM_ABI friend constexpr iter_difference_t<_Iter>
206+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr iter_difference_t<_Iter>
207207
operator-(const counted_iterator& __lhs, default_sentinel_t) {
208208
return -__lhs.__count_;
209209
}
210210

211-
_LIBCPP_HIDE_FROM_ABI friend constexpr iter_difference_t<_Iter>
211+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr iter_difference_t<_Iter>
212212
operator-(default_sentinel_t, const counted_iterator& __rhs) {
213213
return __rhs.__count_;
214214
}
@@ -226,7 +226,7 @@ class counted_iterator
226226
return *this;
227227
}
228228

229-
_LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator[](iter_difference_t<_Iter> __n) const
229+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator[](iter_difference_t<_Iter> __n) const
230230
requires random_access_iterator<_Iter>
231231
{
232232
_LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(__n < __count_, "Subscript argument must be less than size.");

libcxx/include/__iterator/data.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,24 @@ _LIBCPP_BEGIN_NAMESPACE_STD
2222
#if _LIBCPP_STD_VER >= 17
2323

2424
template <class _Cont>
25-
constexpr _LIBCPP_HIDE_FROM_ABI auto data(_Cont& __c) noexcept(noexcept(__c.data())) -> decltype(__c.data()) {
25+
[[nodiscard]] constexpr _LIBCPP_HIDE_FROM_ABI auto data(_Cont& __c) noexcept(noexcept(__c.data()))
26+
-> decltype(__c.data()) {
2627
return __c.data();
2728
}
2829

2930
template <class _Cont>
30-
constexpr _LIBCPP_HIDE_FROM_ABI auto data(const _Cont& __c) noexcept(noexcept(__c.data())) -> decltype(__c.data()) {
31+
[[nodiscard]] constexpr _LIBCPP_HIDE_FROM_ABI auto data(const _Cont& __c) noexcept(noexcept(__c.data()))
32+
-> decltype(__c.data()) {
3133
return __c.data();
3234
}
3335

3436
template <class _Tp, size_t _Sz>
35-
_LIBCPP_HIDE_FROM_ABI constexpr _Tp* data(_Tp (&__array)[_Sz]) noexcept {
37+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Tp* data(_Tp (&__array)[_Sz]) noexcept {
3638
return __array;
3739
}
3840

3941
template <class _Ep>
40-
_LIBCPP_HIDE_FROM_ABI constexpr const _Ep* data(initializer_list<_Ep> __il) noexcept {
42+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const _Ep* data(initializer_list<_Ep> __il) noexcept {
4143
return __il.begin();
4244
}
4345

libcxx/include/__iterator/distance.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ __distance(_InputIter __first, _Sent __last) {
6767
}
6868

6969
template <class _InputIter>
70-
inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 typename iterator_traits<_InputIter>::difference_type
70+
[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17
71+
typename iterator_traits<_InputIter>::difference_type
7172
distance(_InputIter __first, _InputIter __last) {
7273
return std::__distance(__first, __last);
7374
}
@@ -80,12 +81,12 @@ namespace ranges {
8081
struct __distance {
8182
template <class _Ip, sentinel_for<_Ip> _Sp>
8283
requires(!sized_sentinel_for<_Sp, _Ip>)
83-
_LIBCPP_HIDE_FROM_ABI constexpr iter_difference_t<_Ip> operator()(_Ip __first, _Sp __last) const {
84+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr iter_difference_t<_Ip> operator()(_Ip __first, _Sp __last) const {
8485
return std::__distance(std::move(__first), std::move(__last));
8586
}
8687

8788
template <class _Ip, sized_sentinel_for<decay_t<_Ip>> _Sp>
88-
_LIBCPP_HIDE_FROM_ABI constexpr iter_difference_t<_Ip> operator()(_Ip&& __first, _Sp __last) const {
89+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr iter_difference_t<_Ip> operator()(_Ip&& __first, _Sp __last) const {
8990
if constexpr (sized_sentinel_for<_Sp, __remove_cvref_t<_Ip>>) {
9091
return __last - __first;
9192
} else {
@@ -94,7 +95,7 @@ struct __distance {
9495
}
9596

9697
template <range _Rp>
97-
_LIBCPP_HIDE_FROM_ABI constexpr range_difference_t<_Rp> operator()(_Rp&& __r) const {
98+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr range_difference_t<_Rp> operator()(_Rp&& __r) const {
9899
if constexpr (sized_range<_Rp>) {
99100
return static_cast<range_difference_t<_Rp>>(ranges::size(__r));
100101
} else {

libcxx/include/__iterator/size.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,21 @@ _LIBCPP_BEGIN_NAMESPACE_STD
2525
#if _LIBCPP_STD_VER >= 17
2626

2727
template <class _Cont>
28+
[[nodiscard]]
2829
_LIBCPP_HIDE_FROM_ABI constexpr auto size(const _Cont& __c) noexcept(noexcept(__c.size())) -> decltype(__c.size()) {
2930
return __c.size();
3031
}
3132

3233
template <class _Tp, size_t _Sz>
33-
_LIBCPP_HIDE_FROM_ABI constexpr size_t size(const _Tp (&)[_Sz]) noexcept {
34+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr size_t size(const _Tp (&)[_Sz]) noexcept {
3435
return _Sz;
3536
}
3637

3738
# if _LIBCPP_STD_VER >= 20
3839
template <class _Cont>
39-
_LIBCPP_HIDE_FROM_ABI constexpr auto
40-
ssize(const _Cont& __c) noexcept(noexcept(static_cast<common_type_t<ptrdiff_t, make_signed_t<decltype(__c.size())>>>(
41-
__c.size()))) -> common_type_t<ptrdiff_t, make_signed_t<decltype(__c.size())>> {
40+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto ssize(const _Cont& __c) noexcept(
41+
noexcept(static_cast<common_type_t<ptrdiff_t, make_signed_t<decltype(__c.size())>>>(__c.size())))
42+
-> common_type_t<ptrdiff_t, make_signed_t<decltype(__c.size())>> {
4243
return static_cast<common_type_t<ptrdiff_t, make_signed_t<decltype(__c.size())>>>(__c.size());
4344
}
4445

@@ -47,7 +48,7 @@ ssize(const _Cont& __c) noexcept(noexcept(static_cast<common_type_t<ptrdiff_t, m
4748
_LIBCPP_DIAGNOSTIC_PUSH
4849
_LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wsign-conversion")
4950
template <class _Tp, ptrdiff_t _Sz>
50-
_LIBCPP_HIDE_FROM_ABI constexpr ptrdiff_t ssize(const _Tp (&)[_Sz]) noexcept {
51+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr ptrdiff_t ssize(const _Tp (&)[_Sz]) noexcept {
5152
return _Sz;
5253
}
5354
_LIBCPP_DIAGNOSTIC_POP

0 commit comments

Comments
 (0)