Skip to content
Snippets Groups Projects
  • Jonathan Wakely's avatar
    3aeb2ede
    libstdc++: Skip redundant assertions in std::array equality [PR106212] · 3aeb2ede
    Jonathan Wakely authored
    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.
    3aeb2ede
    History
    libstdc++: Skip redundant assertions in std::array equality [PR106212]
    Jonathan Wakely authored
    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.