From: Vadim Zeitlin Date: Tue, 26 Feb 2008 17:42:20 +0000 (+0000) Subject: fixes for MSVC compilation with /Wp64 (used by new _vc7 project files): define wxUInt... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/194727706f8d4c9ca356e29324e10aa37e9c2ac2 fixes for MSVC compilation with /Wp64 (used by new _vc7 project files): define wxUIntPtr as size_t, not ulong; suppress warning about size_t to int conversion as there are simply too many of them to be fixed now git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52123 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/defs.h b/include/wx/defs.h index 6acc275f86..24ec7619bb 100644 --- a/include/wx/defs.h +++ b/include/wx/defs.h @@ -89,11 +89,24 @@ # pragma warning(disable:4003) /* not enough actual parameters for macro */ # endif + /* + When compiling with VC++ 7 /Wp64 option we get thousands of warnings for + conversion from size_t to int or long. Some precious few of them might + be worth looking into but unfortunately it seems infeasible to fix all + the other, harmless ones (e.g. inserting static_cast(s.length()) + everywhere this method is used though we are quite sure that using >4GB + strings is a bad idea anyhow) so just disable it globally for now. + */ + #if wxCHECK_VISUALC_VERSION(7) + /* conversion from 'size_t' to 'unsigned long', possible loss of data */ + #pragma warning(disable:4267) + #endif /* VC++ 7 or later */ + /* VC++ 8 gives a warning when using standard functions such as sprintf, localtime, ... -- stop this madness, unless the user had already done it */ - #if __VISUALC__ >= 1400 + #if wxCHECK_VISUALC_VERSION(8) #ifndef _CRT_SECURE_NO_DEPRECATE #define _CRT_SECURE_NO_DEPRECATE 1 #endif @@ -949,12 +962,22 @@ typedef wxUint32 wxDword; /* Define an integral type big enough to contain all of long, size_t and void *. */ -#if SIZEOF_LONG >= SIZEOF_VOID_P && SIZEOF_LONG >= SIZEOF_SIZE_T - /* normal case */ - typedef unsigned long wxUIntPtr; -#elif SIZEOF_SIZE_T >= SIZEOF_VOID_P - /* Win64 case */ +#if SIZEOF_SIZE_T >= SIZEOF_VOID_P + /* + Win64 case: size_t is the only integral type big enough for "void *". + + Notice that wxUIntPtr should be also defined as size_t when building + under Win32 with MSVC with /Wp64 option as otherwise any conversion + between ints and pointers results in a warning 4311 or 4312, even if it + is safe under Win32. Using size_t (declared with __w64) allows to avoid + them. + */ typedef size_t wxUIntPtr; +#elif SIZEOF_LONG >= SIZEOF_VOID_P + /* + Normal case when long is the largest integral type. + */ + typedef unsigned long wxUIntPtr; #else /* This should never happen for the current architectures but if you're