only VC++ >= 7.0 has __COUNTER__

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30033 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2004-10-20 10:47:28 +00:00
parent cd0c48001c
commit 871cc651b7
2 changed files with 20 additions and 5 deletions

View File

@ -203,16 +203,31 @@
#define wxCOMPILE_TIME_ASSERT(expr, msg) \
class wxMAKE_UNIQUE_ASSERT_NAME { \
unsigned int msg: expr; \
wxMAKE_UNIQUE_ASSERT_NAME(){wxUnusedVar(msg);} \
wxMAKE_UNIQUE_ASSERT_NAME() { wxUnusedVar(msg); } \
}
#else
#define wxCOMPILE_TIME_ASSERT(expr, msg) \
struct wxMAKE_UNIQUE_ASSERT_NAME { unsigned int msg: expr; }
#endif
/*
When using VC++ 6 with "Edit and Continue" on, the compiler completely
mishandles __LINE__ and so wxCOMPILE_TIME_ASSERT() doesn't work, provide a
way to make "unique" assert names by specifying a unique prefix explicitly
*/
#define wxMAKE_UNIQUE_ASSERT_NAME2(text) wxCONCAT(wxAssert_, text)
/* for compatibility only, don't use any more, not needed */
#define wxCOMPILE_TIME_ASSERT2(expr, msg, text) wxCOMPILE_TIME_ASSERT(expr, msg)
#ifdef __WATCOMC__
/* avoid "unused symbol" warning */
#define wxCOMPILE_TIME_ASSERT2(expr, msg, text) \
class wxMAKE_UNIQUE_ASSERT_NAME2(text) { \
unsigned int msg: expr; \
wxMAKE_UNIQUE_ASSERT_NAME2(text) { wxUnusedVar(msg); } \
}
#else
#define wxCOMPILE_TIME_ASSERT2(expr, msg, text) \
struct wxMAKE_UNIQUE_ASSERT_NAME2(text) { unsigned int msg: expr; }
#endif
/* helpers for wxCOMPILE_TIME_ASSERT below, for private use only */
#define wxMAKE_BITSIZE_MSG(type, size) type ## SmallerThan ## size ## Bits

View File

@ -473,11 +473,11 @@ typedef int wxWindowID;
/* appending the current line number to the given identifier to reduce the */
/* probability of the conflict (it may still happen if this is used in the */
/* headers, hence you should avoid doing it or provide unique prefixes then) */
#ifdef __VISUALC__
#if defined(__VISUALC__) && (__VISUALC__ >= 1300)
/*
__LINE__ handling is completely broken in VC++ when using "Edit and
Continue" (/ZI option) and results in preprocessor errors if we use it
inside the macros. Luckily it has another standard macro which can be
inside the macros. Luckily VC7 has another standard macro which can be
used like this and is even better than __LINE__ because it is globally
unique.
*/