diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt index 47e6071cec8..789982d57af 100644 --- a/src/corelib/CMakeLists.txt +++ b/src/corelib/CMakeLists.txt @@ -104,6 +104,7 @@ qt_internal_add_module(Core global/q23functional.h global/q20iterator.h global/qxpfunctional.h + global/qxptype_traits.h io/qabstractfileengine.cpp io/qabstractfileengine_p.h io/qbuffer.cpp io/qbuffer.h io/qdataurl.cpp io/qdataurl_p.h diff --git a/src/corelib/global/qxptype_traits.h b/src/corelib/global/qxptype_traits.h new file mode 100644 index 00000000000..7da04785830 --- /dev/null +++ b/src/corelib/global/qxptype_traits.h @@ -0,0 +1,63 @@ +// Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz +// Copyright (C) 2022 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 QXPTYPE_TRAITS_H +#define QXPTYPE_TRAITS_H + +#include + +#include + +// +// 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::experimental::{nonesuch,is_detected/_v}(LFTSv2) +namespace qxp { + +struct nonesuch { + ~nonesuch() = delete; + nonesuch(const nonesuch&) = delete; + void operator=(const nonesuch&) = delete; +}; + +namespace _detail { + template class Op, typename...Args> + struct detector { + using value_t = std::false_type; + using type = T; + }; + template class Op, typename...Args> + struct detector>, Op, Args...> { + using value_t = std::true_type; + using type = Op; + }; +} // namespace _detail + +template