blob: bc1ec0136bc1bc76035bb04113115a51b69e7562 (
plain)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | // Copyright (C) 2021 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only#ifndef Q20ITERATOR_H#define Q20ITERATOR_H#include <QtCore/qglobal.h>#include <iterator>//// W A R N I N G// -------------//// This file is not part of the Qt API. Types and functions defined in this// file can reliably be replaced by their std counterparts, once available.// You may use these definitions in your own code, but be aware that we// will remove them once Qt depends on the C++ version that supports// them in namespace std. There will be NO deprecation warning, the// definitions will JUST go away.//// If you can't agree to these terms, don't use these definitions!//// We mean it.// QT_BEGIN_NAMESPACE // like std::ssizenamespace q20 {#ifdef __cpp_lib_ssizeusingstd::ssize;#elsetemplate<class C>constexpr autossize(const C &c)->std::common_type_t<std::ptrdiff_t,std::make_signed_t<decltype(c.size())>>{return static_cast<std::common_type_t<std::ptrdiff_t,std::make_signed_t<decltype(c.size())>>>(c.size()); }template<class T,std::ptrdiff_t N>constexpr std::ptrdiff_tssize(constT(&)[N]) noexcept {return N; }#endif}// namespace q20// like std::iter_reference_tnamespace q20 {#ifdef __cpp_lib_rangesusingstd::iter_reference_t;#elsetemplate<typename Dereferencable>// unconstrained (constraint requires concepts)using iter_reference_t =decltype(*std::declval<Dereferencable&>());#endif// __cpp_lib_ranges}// namespace q20 QT_END_NAMESPACE #endif/* Q20ITERATOR_H */
|