Details
-
Bug
-
Resolution: Done
-
P3: Somewhat important
-
6.4.0
-
None
-
Windows 10, MSVC2022
-
-
fdd0a1bc17 (qt/qtbase/dev) fdd0a1bc17 (qt/tqtc-qtbase/dev) ae4f63613b (qt/qtbase/6.4) ae4f63613b (qt/tqtc-qtbase/6.4) ae4f63613b (qt/tqtc-qtbase/tqtc/qtinsight-6.4)
Description
Building with Visual Studio 2022, and setting the -headersclean option results in the following C++23 warning-treated-as-error:
S:/Jenkins/workspace/qt_maya/src/qtbase/src/corelib/kernel/qapplicationstatic.h(20): error C2220: the following warning is treated as an error S:/Jenkins/workspace/qt_maya/src/qtbase/src/corelib/kernel/qapplicationstatic.h(20): warning C4996: 'std::aligned_union_t': warning STL4035: std::aligned_union and std::aligned_union_t are deprecated in C++23. Prefer alignas(Ts...) std::byte t_buff[std::max({sizeof(Ts)...})]. You can define _SILENCE_CXX23_ALIGNED_UNION_DEPRECATION_WARNING or _SILENCE_ALL_CXX23_DEPRECATION_WARNINGS to acknowledge that you have received this warning. S:/Jenkins/workspace/qt_maya/src/qtbase/src/corelib/kernel/qapplicationstatic.h(64): note: see reference to class template instantiation 'QtGlobalStatic::ApplicationHolder<QAS>' being compiled
As this is a C++23 standard deprecation, and C++17 was detected as the c++std to use, I think this is erroneous.
This is caused by the following snippet from qtbase/cmake/QtHeadersClean.cmake:
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") # -Za would enable strict standards behavior, but we can't add it because # <windows.h> and <GL.h> violate the standards. set(hcleanFLAGS -std:c++latest -Zc:__cplusplus -WX -W3)
I do not think this should be using -std:c++latest, but instead honoring the c++std selected or detected during configure.
This is the full configure line I used:
set MODULES_TO_SKIP=-skip qtnetworkauth -skip qtpurchasing -skip qtquickcontrols -skip qtquick3d -skip qtlottie -skip qtcharts -skip qtdatavis3d -skip qtvirtualkeyboard -skip qtscript -skip qtwayland -skip qtwebglplugin -skip qtactiveqt -skip qtconnectivity -skip qtcoap -skip qtmqtt -skip qtopcua -skip qtquicktimeline call %SOURCE_DIR%\configure -opensource -confirm-license -prefix %INSTALL_DIR% -debug-and-release -nomake tests -nomake examples -force-debug-info -headersclean -optimized-tools -opengl desktop -feature-qtwebengine-build %MODULES_TO_SKIP% -openssl-runtime -- -DOPENSSL_ROOT_DIR=%OPENSSL_ROOT_DIR%
Attachments
Issue Links
- duplicates
-
QTBUG-99122 std::aligned_{storage,union} are deprecated in C++23
- Closed
- is duplicated by
-
QTBUG-107769 QtModuleHeadersCheck fails with Windows 11 22H2
- Closed
- resulted in
-
QTBUG-107688 Share more code between Q_APPLICATION_STATIC and Q_GLOBAL_STATIC
- Open
For Gerrit Dashboard: QTBUG-107569 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
437983,9 | ApplicationHolder: get rid of (c++23) deprecated aligned_union | dev | qt/qtbase | Status: ABANDONED | -1 | 0 |
437995,2 | Replace soon-to-be deprecated std::aligned_union_t | dev | qt/qtbase | Status: ABANDONED | 0 | 0 |
438480,4 | QApplicationStatic: avoid use of std::aligned_union | dev | qt/qtbase | Status: MERGED | +2 | 0 |
438729,2 | QApplicationStatic: avoid use of std::aligned_union | 6.4 | qt/qtbase | Status: MERGED | +2 | 0 |