| 1 | /////////////////////////////////////////////////////////////////////////////// |
| 2 | // Name: wx/beforestd.h |
| 3 | // Purpose: #include before STL headers |
| 4 | // Author: Vadim Zeitlin |
| 5 | // Modified by: |
| 6 | // Created: 07/07/03 |
| 7 | // RCS-ID: $Id$ |
| 8 | // Copyright: (c) 2003 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> |
| 9 | // Licence: wxWindows licence |
| 10 | /////////////////////////////////////////////////////////////////////////////// |
| 11 | |
| 12 | /** |
| 13 | Unfortunately, when compiling at maximum warning level, the standard |
| 14 | headers themselves may generate warnings -- and really lots of them. So |
| 15 | before including them, this header should be included to temporarily |
| 16 | suppress the warnings and after this the header afterstd.h should be |
| 17 | included to enable them back again. |
| 18 | |
| 19 | Note that there are intentionally no inclusion guards in this file, because |
| 20 | it can be included several times. |
| 21 | */ |
| 22 | |
| 23 | // VC 7.x isn't as bad as VC6 and doesn't give these warnings but eVC (which |
| 24 | // defines _MSC_VER as 1201) does need to be included as it's VC6-like |
| 25 | #if defined(__VISUALC__) && __VISUALC__ <= 1201 |
| 26 | // these warning have to be disabled and not just temporarily disabled |
| 27 | // because they will be given at the end of the compilation of the |
| 28 | // current source and there is absolutely nothing we can do about them so |
| 29 | // disable them before warning(push) below |
| 30 | |
| 31 | // 'foo': unreferenced inline function has been removed |
| 32 | #pragma warning(disable:4514) |
| 33 | |
| 34 | // 'function' : function not inlined |
| 35 | #pragma warning(disable:4710) |
| 36 | |
| 37 | // 'id': identifier was truncated to 'num' characters in the debug info |
| 38 | #pragma warning(disable:4786) |
| 39 | |
| 40 | // MSVC 5 does not have this |
| 41 | #if __VISUALC__ > 1100 |
| 42 | // we have to disable (and reenable in afterstd.h) this one because, |
| 43 | // even though it is of level 4, it is not disabled by warning(push, 1) |
| 44 | // below for VC7.1! |
| 45 | |
| 46 | // unreachable code |
| 47 | #pragma warning(disable:4702) |
| 48 | |
| 49 | #pragma warning(push, 1) |
| 50 | #else // VC 5 |
| 51 | // 'expression' : signed/unsigned mismatch |
| 52 | #pragma warning(disable:4018) |
| 53 | |
| 54 | // 'identifier' : unreferenced formal parameter |
| 55 | #pragma warning(disable:4100) |
| 56 | |
| 57 | // 'conversion' : conversion from 'type1' to 'type2', |
| 58 | // possible loss of data |
| 59 | #pragma warning(disable:4244) |
| 60 | |
| 61 | // C++ language change: to explicitly specialize class template |
| 62 | // 'identifier' use the following syntax |
| 63 | #pragma warning(disable:4663) |
| 64 | #endif |
| 65 | #endif // VC++ < 7 |
| 66 | |
| 67 | /** |
| 68 | GCC's visibility support is broken for libstdc++ in some older versions |
| 69 | (namely Debian/Ubuntu's GCC 4.1, see |
| 70 | https://bugs.launchpad.net/ubuntu/+source/gcc-4.1/+bug/109262). We fix it |
| 71 | here by mimicking newer versions' behaviour of using default visibility |
| 72 | for libstdc++ code. |
| 73 | */ |
| 74 | #if defined(HAVE_VISIBILITY) && defined(HAVE_BROKEN_LIBSTDCXX_VISIBILITY) |
| 75 | #pragma GCC visibility push(default) |
| 76 | #endif |