aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/std/array
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2024-12-09 17:35:24 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2024-12-11 21:50:53 +0000
commit3aeb2edee2f9fc39ab77c7e020f09d7204b167ac (patch)
treeabadc7e347c3644a582b6151e7e4d6572628cd5a /libstdc++-v3/include/std/array
parente95bda027e0b81922c1bf44770674190bdf787e8 (diff)
downloadgcc-3aeb2edee2f9fc39ab77c7e020f09d7204b167ac.zip
gcc-3aeb2edee2f9fc39ab77c7e020f09d7204b167ac.tar.gz
gcc-3aeb2edee2f9fc39ab77c7e020f09d7204b167ac.tar.bz2
libstdc++: Skip redundant assertions in std::array equality [PR106212]
As PR c++/106212 shows, the Debug Mode checks cause a compilation error for equality comparisons involving std::array prvalues in constant expressions. Those Debug Mode checks are redundant when comparing two std::array objects, because we already know we have a valid range. We can also avoid the unnecessary step of using std::__niter_base to do __normal_iterator unwrapping, which isn't needed because our std::array iterators are just pointers. Using std::__equal_aux1 instead of std::equal avoids the redundant checks in std::equal and std::__equal_aux. libstdc++-v3/ChangeLog: PR libstdc++/106212 * include/std/array (operator==): Use std::__equal_aux1 instead of std::equal. * testsuite/23_containers/array/comparison_operators/106212.cc: New test.
Diffstat (limited to 'libstdc++-v3/include/std/array')
-rw-r--r--libstdc++-v3/include/std/array2
1 files changed, 1 insertions, 1 deletions
diff --git a/libstdc++-v3/include/std/array b/libstdc++-v3/include/std/array
index 172b320..1b1c5cc 100644
--- a/libstdc++-v3/include/std/array
+++ b/libstdc++-v3/include/std/array
@@ -303,7 +303,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX20_CONSTEXPR
inline bool
operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
- { return std::equal(__one.begin(), __one.end(), __two.begin()); }
+ { return std::__equal_aux1(__one.begin(), __one.end(), __two.begin()); }
#if __cpp_lib_three_way_comparison // C++ >= 20 && lib_concepts
template<typename _Tp, size_t _Nm>