kfunk requested changes to this revision. kfunk added a comment. This revision now requires changes to proceed.
Can't go in as-is, as it breaks compilation on MSVC 2015. But interesting to see that `/Za` is actually problematic. Which proves my point: Just don't use named operators in code which claims to be cross-platform. INLINE COMMENTS > KDECompilerSettings.cmake:230 > + if (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 19.0.24210) > + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Za") > + elseif() Doesn't work, breaks compilation inside WinSDK 10: FAILED: src/CMakeFiles/KF5Parts.dir/readwritepart.cpp.obj C:\PROGRA~2\MICROS~2.0\VC\bin\amd64\cl.exe /nologo /TP -DKCOREADDONS_LIB -DKF5Parts_EXPORTS -DQT_CORE_LIB -DQT_DBUS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_NO_SIG NALS_SLOTS_KEYWORDS -DQT_NO_URL_CAST_FROM_STRING -DQT_USE_FAST_OPERATOR_PLUS -DQT_USE_QSTRINGBUILDER -DQT_WIDGETS_LIB -DQT_XML_LIB -DTRANSLATION_DOMAIN=\"kparts5\" -DUNICODE -DWIN32_LEAN_AND_MEAN -DW INVER=0x0600 -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS -D_UNICODE -D_USE_MATH_DEFINES -D_WIN32_IE=0x0600 -D_WIN32_WINNT=0x0600 -Isrc - IZ:\kderoot\download\git\kparts\src -I. -IZ:\kderoot\include\KF5\KIOWidgets -IZ:\kderoot\include\KF5 -IZ:\kderoot\include\KF5\KIOCore -IZ:\kderoot\include\KF5\KCoreAddons -IZ:\kderoot\include\qt5 -IZ :\kderoot\include\qt5\QtCore -IZ:\kderoot\.\mkspecs\win32-msvc2015 -IZ:\kderoot\include\KF5\KService -IZ:\kderoot\include\KF5\KConfigCore -IZ:\kderoot\include\KF5\KJobWidgets -IZ:\kderoot\include\qt5 \QtWidgets -IZ:\kderoot\include\qt5\QtGui -IZ:\kderoot\include\qt5\QtNetwork -IZ:\kderoot\include\KF5\KCompletion -IZ:\kderoot\include\KF5\KWidgetsAddons -IZ:\kderoot\include\KF5\KXmlGui -IZ:\kderoot \include\qt5\QtDBus -IZ:\kderoot\include\qt5\QtXml -IZ:\kderoot\include\KF5\KConfigWidgets -IZ:\kderoot\include\KF5\KCodecs -IZ:\kderoot\include\KF5\KConfigGui -IZ:\kderoot\include\KF5\KAuth -IZ:\kde root\include\KF5\KTextWidgets -IZ:\kderoot\include\KF5\SonnetUi -IZ:\kderoot\include\KF5\KI18n -IZ:\kderoot\include\KF5\KIconThemes /DWIN32 /D_WINDOWS /W3 /GR /EHsc /wd4250 /wd4251 /wd4396 /wd4661 /Z a /MD /Zi /O2 /Ob1 /DNDEBUG /showIncludes /Fosrc\CMakeFiles\KF5Parts.dir\readwritepart.cpp.obj /Fdsrc\CMakeFiles\KF5Parts.dir\ /FS -c Z:\kderoot\download\git\kparts\src\readwritepart.cpp C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\um\winnt.h(12128): error C2467: illegal declaration of anonymous 'struct' Known issue: https://stackoverflow.com/questions/5489326/za-compiler-directive-does-not-compile-system-headers-in-vs2010 Apparently Microsoft doesn't even test their own headers against compiling with `/Za` > KDECompilerSettings.cmake:231 > + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Za") > + elseif() > + # /permissive- became the preferred switch to obtain > standards-compliant Typo: `else()` then this branch is actually executed. > KDECompilerSettings.cmake:239 > + # https://sourceforge.net/p/predef/wiki/Compilers/ > + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /permissive-") > + endif() Doesn't work on MSVC 2015 Update 3: cl : Command line warning D9002 : ignoring unknown option '/permissive-' My Version: Microsoft (R) C/C++ Optimizing Compiler Version 19.00.24215.1 for x64 REPOSITORY R240 Extra CMake Modules REVISION DETAIL https://phabricator.kde.org/D5865 To: rjvbb, #frameworks, #build_system, cgilles, kfunk Cc: kfunk