From 871cc651b74a91a23027b0a4e89bf82a90f693f4 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 20 Oct 2004 10:47:28 +0000 Subject: [PATCH] only VC++ >= 7.0 has __COUNTER__ git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30033 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/debug.h | 21 ++++++++++++++++++--- include/wx/defs.h | 4 ++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/include/wx/debug.h b/include/wx/debug.h index 2876fa5286..c030f2abba 100644 --- a/include/wx/debug.h +++ b/include/wx/debug.h @@ -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 diff --git a/include/wx/defs.h b/include/wx/defs.h index 4e4ca874d1..76ded59ec7 100644 --- a/include/wx/defs.h +++ b/include/wx/defs.h @@ -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. */ -- 2.45.2