From 271711b0304b5c3cded00bf0d413eba01f4e9f01 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 21 Oct 2019 20:49:44 +0200 Subject: [PATCH] Get rid of spurious warning in CRT malloc.h with MSVS 2017 Recent MSVS 2017 versions (15.9.x) as well as MSVS 2019 give warning C4548 about "expression before comma having no effect" when including standard CRT headers. This happens because when building projects targeting 8.1 SDK, as the IDE uses the hard coded 10.0.240.0 version of UCRT headers in this case (see \Common7\IDE\VC\VCTargets\Microsoft.Cpp.Common.props), and the headers in this version haven't been, and will never be, updated to avoid this warning, as was done in later 10.0.x UCRT versions. Fix this by explicitly disabling the warning in wx/beforestd.h, as even setting the warning level to 1 for the standard headers somehow isn't enough to suppress it if it's enabled. --- include/wx/afterstd.h | 5 +++++ include/wx/beforestd.h | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/wx/afterstd.h b/include/wx/afterstd.h index 8cb0fd19ca..5594f6956b 100644 --- a/include/wx/afterstd.h +++ b/include/wx/afterstd.h @@ -16,6 +16,11 @@ #include "wx/msw/winundef.h" #endif +// undo what we did in wx/beforestd.h +#if defined(__VISUALC__) && __VISUALC__ >= 1910 + #pragma warning(pop) +#endif // VC++ >= 14.1 + // see beforestd.h for explanation #if defined(HAVE_VISIBILITY) && defined(HAVE_BROKEN_LIBSTDCXX_VISIBILITY) #pragma GCC visibility pop diff --git a/include/wx/beforestd.h b/include/wx/beforestd.h index c5a95da564..6a2550bcbe 100644 --- a/include/wx/beforestd.h +++ b/include/wx/beforestd.h @@ -19,6 +19,19 @@ it can be included several times. */ +#if defined(__VISUALC__) && __VISUALC__ >= 1910 + #pragma warning(push, 1) + + // This warning, given when a malloc.h from 10.0.240.0 version of UCRT, + // which is used when building projects targeting 8.1 SDK, compiled by MSVS + // 2017 or later, is still given even at warning level 1, in spite of it + // being level 4, so we have to explicitly disable it here (as we do it + // after the warning push pragma, it will be restored after pop). + // + // expression before comma has no effect; expected expression with side-effect + #pragma warning(disable:4548) +#endif // VC++ >= 14.1 + /** GCC's visibility support is broken for libstdc++ in some older versions (namely Debian/Ubuntu's GCC 4.1, see