// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_CONTAINERS_CHECKED_ITERATORS_H_ #define BASE_CONTAINERS_CHECKED_ITERATORS_H_ #include <concepts> #include <iterator> #include <memory> #include <type_traits> #include "base/check_op.h" #include "base/compiler_specific.h" #include "base/containers/util.h" #include "base/memory/raw_ptr_exclusion.h" #include "build/build_config.h" namespace base { template <typename T> class CheckedContiguousIterator { … }; CheckedContiguousConstIterator; } // namespace base // Specialize std::pointer_traits so that we can obtain the underlying raw // pointer without resulting in CHECK failures. The important bit is the // `to_address(pointer)` overload, which is the standard blessed way to // customize `std::to_address(pointer)` in C++20 [1]. // // [1] https://wg21.link/pointer.traits.optmem pointer_traits< ::base::CheckedContiguousIterator<T>>; #endif // BASE_CONTAINERS_CHECKED_ITERATORS_H_