Patch status: fixed in >=chromium-116.0.5809.0 Backport of [2][3] in order to fix building with libcxx-17 (and hopefully runtime if upgrade from 16->17 without rebuilding). In order to apply cleanly, also needed [4] which seems fine to have. [1] https://crbug.com/1449299 [2] https://crrev.com/9bfbbffdba73668fdb483e5a850911d2b64c35d7 [3] https://crrev.com/4878976cd7391fbc02f87af4b7fb539b5c1f3817 [4] https://crrev.com/5b5551edd3961481e617e510276b9f015a35b861 --- a/src/3rdparty/chromium/base/containers/checked_iterators.h +++ b/src/3rdparty/chromium/base/containers/checked_iterators.h @@ -24,4 +24,7 @@ using reference = T&; using iterator_category = std::random_access_iterator_tag; +#if defined(__cpp_lib_ranges) + using iterator_concept = std::contiguous_iterator_tag; +#endif // Required for converting constructor below. @@ -31,8 +34,6 @@ // Required for certain libc++ algorithm optimizations that are not available // for NaCl. -#if defined(_LIBCPP_VERSION) && !BUILDFLAG(IS_NACL) template friend struct std::pointer_traits; -#endif constexpr CheckedContiguousIterator() = default; @@ -147,4 +148,10 @@ } + constexpr friend CheckedContiguousIterator operator+( + difference_type lhs, + const CheckedContiguousIterator& rhs) { + return rhs + lhs; + } + constexpr CheckedContiguousIterator& operator-=(difference_type rhs) { if (rhs < 0) { @@ -218,5 +225,4 @@ } // namespace base -#if defined(_LIBCPP_VERSION) && !BUILDFLAG(IS_NACL) // Specialize both std::__is_cpp17_contiguous_iterator and std::pointer_traits // for CCI in case we compile with libc++ outside of NaCl. The former is @@ -236,11 +242,28 @@ // [2] https://wg21.link/std.iterator.tags // [3] https://wg21.link/pointer.traits.optmem -namespace std { + +#if defined(_LIBCPP_VERSION) + +_LIBCPP_BEGIN_NAMESPACE_STD template +struct __is_cpp17_contiguous_iterator; +template struct __is_cpp17_contiguous_iterator<::base::CheckedContiguousIterator> : true_type {}; template +struct __libcpp_is_contiguous_iterator; +template +struct __libcpp_is_contiguous_iterator<::base::CheckedContiguousIterator> + : true_type {}; + +_LIBCPP_END_NAMESPACE_STD + +#endif + +namespace std { + +template struct pointer_traits<::base::CheckedContiguousIterator> { using pointer = ::base::CheckedContiguousIterator; @@ -261,5 +284,4 @@ } // namespace std -#endif #endif // BASE_CONTAINERS_CHECKED_ITERATORS_H_