diff options
author | Sona Kurazyan <sona.kurazyan@qt.io> | 2022-07-28 11:41:28 +0200 |
---|---|---|
committer | Sona Kurazyan <sona.kurazyan@qt.io> | 2022-07-29 23:04:21 +0200 |
commit | ff8de321e22b1e91f7fc04ffe54609b045f23835 (patch) | |
tree | 7c03a50bfb0f5e10221784efa413fe650b0b099f /src/corelib/global/qglobal.h | |
parent | 19454b05c2857d8d332ff9e70dcd1d07875dce68 (diff) |
Extract header qoverload.h from qglobal.h
Task-number: QTBUG-99313
Change-Id: Id827f95b5aa5d4e0d57dcc1060a0746bcaa34db3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/global/qglobal.h')
-rw-r--r-- | src/corelib/global/qglobal.h | 64 |
1 files changed, 1 insertions, 63 deletions
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 21762c39e2..f6a6013518 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -1213,62 +1213,6 @@ template <typename Ptr> inline auto qGetPtrHelper(Ptr &ptr) noexcept -> decltype #define Q_D(Class) Class##Private * const d = d_func() #define Q_Q(Class) Class * const q = q_func() -#ifdef Q_QDOC -// Just for documentation generation -template<typename T> -auto qOverload(T functionPointer); -template<typename T> -auto qConstOverload(T memberFunctionPointer); -template<typename T> -auto qNonConstOverload(T memberFunctionPointer); -#else -template <typename... Args> -struct QNonConstOverload -{ - template <typename R, typename T> - constexpr auto operator()(R (T::*ptr)(Args...)) const noexcept -> decltype(ptr) - { return ptr; } - - template <typename R, typename T> - static constexpr auto of(R (T::*ptr)(Args...)) noexcept -> decltype(ptr) - { return ptr; } -}; - -template <typename... Args> -struct QConstOverload -{ - template <typename R, typename T> - constexpr auto operator()(R (T::*ptr)(Args...) const) const noexcept -> decltype(ptr) - { return ptr; } - - template <typename R, typename T> - static constexpr auto of(R (T::*ptr)(Args...) const) noexcept -> decltype(ptr) - { return ptr; } -}; - -template <typename... Args> -struct QOverload : QConstOverload<Args...>, QNonConstOverload<Args...> -{ - using QConstOverload<Args...>::of; - using QConstOverload<Args...>::operator(); - using QNonConstOverload<Args...>::of; - using QNonConstOverload<Args...>::operator(); - - template <typename R> - constexpr auto operator()(R (*ptr)(Args...)) const noexcept -> decltype(ptr) - { return ptr; } - - template <typename R> - static constexpr auto of(R (*ptr)(Args...)) noexcept -> decltype(ptr) - { return ptr; } -}; - -template <typename... Args> constexpr inline QOverload<Args...> qOverload = {}; -template <typename... Args> constexpr inline QConstOverload<Args...> qConstOverload = {}; -template <typename... Args> constexpr inline QNonConstOverload<Args...> qNonConstOverload = {}; -#endif - - class QByteArray; Q_CORE_EXPORT QByteArray qgetenv(const char *varName); // need it as two functions because QString is only forward-declared here @@ -1290,13 +1234,6 @@ Q_CORE_EXPORT int qEnvironmentVariableIntValue(const char *varName, bool *ok=nu "Compile your code with -fPIC (and not with -fPIE)." #endif -#define QT_VA_ARGS_CHOOSE(_1, _2, _3, _4, _5, _6, _7, _8, _9, N, ...) N -#define QT_VA_ARGS_EXPAND(...) __VA_ARGS__ // Needed for MSVC -#define QT_VA_ARGS_COUNT(...) QT_VA_ARGS_EXPAND(QT_VA_ARGS_CHOOSE(__VA_ARGS__, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)) -#define QT_OVERLOADED_MACRO_EXPAND(MACRO, ARGC) MACRO##_##ARGC -#define QT_OVERLOADED_MACRO_IMP(MACRO, ARGC) QT_OVERLOADED_MACRO_EXPAND(MACRO, ARGC) -#define QT_OVERLOADED_MACRO(MACRO, ...) QT_VA_ARGS_EXPAND(QT_OVERLOADED_MACRO_IMP(MACRO, QT_VA_ARGS_COUNT(__VA_ARGS__))(__VA_ARGS__)) - // This macro can be used to calculate member offsets for types with a non standard layout. // It uses the fact that offsetof() is allowed to support those types since C++17 as an optional // feature. All our compilers do support this, but some issue a warning, so we wrap the offsetof() @@ -1322,6 +1259,7 @@ QT_END_NAMESPACE #include <QtCore/qforeach.h> #include <QtCore/qglobalstatic.h> #include <QtCore/qnumeric.h> +#include <QtCore/qoverload.h> #include <QtCore/qtranslation.h> #include <QtCore/qversiontagging.h> |