diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2021-08-03 20:50:52 +0100 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2021-08-04 12:54:29 +0100 |
commit | 0d04fe49239d91787850036599164788f1c87785 (patch) | |
tree | fc8e84c4b7ae94e3206bb65579fd6ef45ff9d8a3 /libstdc++-v3/include/std/array | |
parent | 240b01b0215f9e46ecf04267c8a3faeb19d4fe3c (diff) | |
download | gcc-0d04fe49239d91787850036599164788f1c87785.zip gcc-0d04fe49239d91787850036599164788f1c87785.tar.gz gcc-0d04fe49239d91787850036599164788f1c87785.tar.bz2 |
libstdc++: Add [[nodiscard]] to sequence containers
... and container adaptors.
This adds the [[nodiscard]] attribute to functions with no side-effects
for the sequence containers and their iterators, and the debug versions
of those containers, and the container adaptors,
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:
* include/bits/forward_list.h: Add [[nodiscard]] to functions
with no side-effects.
* include/bits/stl_bvector.h: Likewise.
* include/bits/stl_deque.h: Likewise.
* include/bits/stl_list.h: Likewise.
* include/bits/stl_queue.h: Likewise.
* include/bits/stl_stack.h: Likewise.
* include/bits/stl_vector.h: Likewise.
* include/debug/deque: Likewise.
* include/debug/forward_list: Likewise.
* include/debug/list: Likewise.
* include/debug/safe_iterator.h: Likewise.
* include/debug/vector: Likewise.
* include/std/array: Likewise.
* testsuite/23_containers/array/creation/3_neg.cc: Use
-Wno-unused-result.
* testsuite/23_containers/array/debug/back1_neg.cc: Cast result
to void.
* testsuite/23_containers/array/debug/back2_neg.cc: Likewise.
* testsuite/23_containers/array/debug/front1_neg.cc: Likewise.
* testsuite/23_containers/array/debug/front2_neg.cc: Likewise.
* testsuite/23_containers/array/debug/square_brackets_operator1_neg.cc:
Likewise.
* testsuite/23_containers/array/debug/square_brackets_operator2_neg.cc:
Likewise.
* testsuite/23_containers/array/tuple_interface/get_neg.cc:
Adjust dg-error line numbers.
* testsuite/23_containers/deque/cons/clear_allocator.cc: Cast
result to void.
* testsuite/23_containers/deque/debug/invalidation/4.cc:
Likewise.
* testsuite/23_containers/deque/types/1.cc: Use
-Wno-unused-result.
* testsuite/23_containers/list/types/1.cc: Cast result to void.
* testsuite/23_containers/priority_queue/members/7161.cc:
Likewise.
* testsuite/23_containers/queue/members/7157.cc: Likewise.
* testsuite/23_containers/vector/59829.cc: Likewise.
* testsuite/23_containers/vector/ext_pointer/types/1.cc:
Likewise.
* testsuite/23_containers/vector/ext_pointer/types/2.cc:
Likewise.
* testsuite/23_containers/vector/types/1.cc: Use
-Wno-unused-result.
Diffstat (limited to 'libstdc++-v3/include/std/array')
-rw-r--r-- | libstdc++-v3/include/std/array | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/libstdc++-v3/include/std/array b/libstdc++-v3/include/std/array index ea8d3cb..3e12d35 100644 --- a/libstdc++-v3/include/std/array +++ b/libstdc++-v3/include/std/array @@ -127,65 +127,81 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { std::swap_ranges(begin(), end(), __other.begin()); } // Iterators. + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR iterator begin() noexcept { return iterator(data()); } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR const_iterator begin() const noexcept { return const_iterator(data()); } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR iterator end() noexcept { return iterator(data() + _Nm); } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR const_iterator end() const noexcept { return const_iterator(data() + _Nm); } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR reverse_iterator rbegin() noexcept { return reverse_iterator(end()); } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR const_reverse_iterator rbegin() const noexcept { return const_reverse_iterator(end()); } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR reverse_iterator rend() noexcept { return reverse_iterator(begin()); } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR const_reverse_iterator rend() const noexcept { return const_reverse_iterator(begin()); } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR const_iterator cbegin() const noexcept { return const_iterator(data()); } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR const_iterator cend() const noexcept { return const_iterator(data() + _Nm); } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR const_reverse_iterator crbegin() const noexcept { return const_reverse_iterator(end()); } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR const_reverse_iterator crend() const noexcept { return const_reverse_iterator(begin()); } // Capacity. + [[__nodiscard__]] constexpr size_type size() const noexcept { return _Nm; } + [[__nodiscard__]] constexpr size_type max_size() const noexcept { return _Nm; } - _GLIBCXX_NODISCARD constexpr bool + [[__nodiscard__]] + constexpr bool empty() const noexcept { return size() == 0; } // Element access. + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR reference operator[](size_type __n) noexcept { @@ -193,6 +209,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return _AT_Type::_S_ref(_M_elems, __n); } + [[__nodiscard__]] constexpr const_reference operator[](size_type __n) const noexcept { @@ -224,6 +241,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _AT_Type::_S_ref(_M_elems, 0)); } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR reference front() noexcept { @@ -231,6 +249,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return *begin(); } + [[__nodiscard__]] constexpr const_reference front() const noexcept { @@ -240,6 +259,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return _AT_Type::_S_ref(_M_elems, 0); } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR reference back() noexcept { @@ -247,6 +267,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return _Nm ? *(end() - 1) : *end(); } + [[__nodiscard__]] constexpr const_reference back() const noexcept { @@ -257,10 +278,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : _AT_Type::_S_ref(_M_elems, 0); } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR pointer data() noexcept { return _AT_Type::_S_ptr(_M_elems); } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR const_pointer data() const noexcept { return _AT_Type::_S_ptr(_M_elems); } @@ -275,6 +298,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Array comparisons. template<typename _Tp, std::size_t _Nm> + [[__nodiscard__]] _GLIBCXX20_CONSTEXPR inline bool operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) @@ -282,6 +306,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cpp_lib_three_way_comparison && __cpp_lib_concepts template<typename _Tp, size_t _Nm> + [[nodiscard]] constexpr __detail::__synth3way_t<_Tp> operator<=>(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b) { @@ -304,12 +329,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } #else template<typename _Tp, std::size_t _Nm> + [[__nodiscard__]] _GLIBCXX20_CONSTEXPR inline bool operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) { return !(__one == __two); } template<typename _Tp, std::size_t _Nm> + [[__nodiscard__]] _GLIBCXX20_CONSTEXPR inline bool operator<(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b) @@ -319,18 +346,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template<typename _Tp, std::size_t _Nm> + [[__nodiscard__]] _GLIBCXX20_CONSTEXPR inline bool operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) { return __two < __one; } template<typename _Tp, std::size_t _Nm> + [[__nodiscard__]] _GLIBCXX20_CONSTEXPR inline bool operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) { return !(__one > __two); } template<typename _Tp, std::size_t _Nm> + [[__nodiscard__]] _GLIBCXX20_CONSTEXPR inline bool operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) @@ -361,6 +391,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif template<std::size_t _Int, typename _Tp, std::size_t _Nm> + [[__nodiscard__]] constexpr _Tp& get(array<_Tp, _Nm>& __arr) noexcept { @@ -369,6 +400,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template<std::size_t _Int, typename _Tp, std::size_t _Nm> + [[__nodiscard__]] constexpr _Tp&& get(array<_Tp, _Nm>&& __arr) noexcept { @@ -377,6 +409,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template<std::size_t _Int, typename _Tp, std::size_t _Nm> + [[__nodiscard__]] constexpr const _Tp& get(const array<_Tp, _Nm>& __arr) noexcept { @@ -385,6 +418,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template<std::size_t _Int, typename _Tp, std::size_t _Nm> + [[__nodiscard__]] constexpr const _Tp&& get(const array<_Tp, _Nm>&& __arr) noexcept { @@ -406,6 +440,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template<typename _Tp, size_t _Nm> + [[nodiscard]] constexpr array<remove_cv_t<_Tp>, _Nm> to_array(_Tp (&__a)[_Nm]) noexcept(is_nothrow_constructible_v<_Tp, _Tp&>) @@ -418,6 +453,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template<typename _Tp, size_t _Nm> + [[nodiscard]] constexpr array<remove_cv_t<_Tp>, _Nm> to_array(_Tp (&&__a)[_Nm]) noexcept(is_nothrow_move_constructible_v<_Tp>) |