summaryrefslogtreecommitdiffstats
path: root/src/corelib/global/qglobal.h
diff options
context:
space:
mode:
authorOliver Wolff <oliver.wolff@qt.io>2022-07-27 10:20:39 +0200
committerThiago Macieira <thiago.macieira@intel.com>2022-08-03 15:59:06 +0000
commit51acd4708296de4392232271b3d6c5d067bdffad (patch)
tree3ca99f5ca60e55788a24e377aa0827e8d0bae5f8 /src/corelib/global/qglobal.h
parent870cfa4e17c42698b77504cfc19728acfbf7d659 (diff)
Disable constinit for MSVC compilers
https://developercommunity.visualstudio.com/t/C:-constinit-for-an-optional-fails-if-/1406069 does not only affect constinit thread_local but also constinit in general on MSVC compilers when C++20 is being used. So disable the feature for these compilers in general for now. This commit amends d9531593a248e19f7da7862b2870a6af2f413e75 Fixes: QTBUG-105234 Pick-to: 6.4 Change-Id: I1855f0857d85487895460fc7c56675fb864bfa73 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/global/qglobal.h')
-rw-r--r--src/corelib/global/qglobal.h9
1 files changed, 3 insertions, 6 deletions
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 982cb4bf34..d1207498af 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -895,10 +895,11 @@ constexpr std::underlying_type_t<Enum> qToUnderlying(Enum e) noexcept
#endif
#ifdef __cpp_constinit
-# define Q_CONSTINIT constinit
# if defined(Q_CC_MSVC) && !defined(Q_CC_CLANG)
// https://developercommunity.visualstudio.com/t/C:-constinit-for-an-optional-fails-if-/1406069
-# define Q_THREAD_LOCAL_CONSTINIT
+# define Q_CONSTINIT
+# else
+# define Q_CONSTINIT constinit
# endif
#elif defined(__has_cpp_attribute) && __has_cpp_attribute(clang::require_constant_initialization)
# define Q_CONSTINIT [[clang::require_constant_initialization]]
@@ -908,10 +909,6 @@ constexpr std::underlying_type_t<Enum> qToUnderlying(Enum e) noexcept
# define Q_CONSTINIT
#endif
-#ifndef Q_THREAD_LOCAL_CONSTINIT
-# define Q_THREAD_LOCAL_CONSTINIT Q_CONSTINIT
-#endif
-
template <typename T> inline T *qGetPtrHelper(T *ptr) noexcept { return ptr; }
template <typename Ptr> inline auto qGetPtrHelper(Ptr &ptr) noexcept -> decltype(ptr.get())
{ static_assert(noexcept(ptr.get()), "Smart d pointers for Q_DECLARE_PRIVATE must have noexcept get()"); return ptr.get(); }