The old solution worked fine for that compiler and the new one fails when
wxLogXXX() is used inside a switch statement to the wrong rules used by VC6
for the scope of the variables defined inside the for loop.
Simply revert back to using the old version for it, this will be easy to
re-revert after 3.0 by simply removing the check for it.
See #11829.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74762
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
//
// See also #11829 for the problems with other simpler approaches,
// notably the need for two macros due to buggy __LINE__ in MSVC.
//
// See also #11829 for the problems with other simpler approaches,
// notably the need for two macros due to buggy __LINE__ in MSVC.
+//
+// Note 2: Unfortunately we can't use the same solution for all compilers
+// because the loop-based one results in problems with MSVC6 due to its
+// wrong (pre-C++98) rules for the scope of the variables declared
+// inside the loop, as this prevents us from using wxLogXXX() in switch
+// statement clauses ("initialization of loopvar skipped by case"). So
+// for now, i.e. while we still support VC6, use the previous solution
+// for it (FIXME-VC6).
+#ifdef __VISUALC6__
+#define wxDO_LOG_IF_ENABLED(level) \
+ if ( !wxLog::IsLevelEnabled(wxLOG_##level, wxLOG_COMPONENT) ) \
+ {} \
+ else \
+ wxDO_LOG(level)
+#else
#define wxDO_LOG_IF_ENABLED_HELPER(level, loopvar) \
for ( bool loopvar = false; \
!loopvar && wxLog::IsLevelEnabled(wxLOG_##level, wxLOG_COMPONENT); \
#define wxDO_LOG_IF_ENABLED_HELPER(level, loopvar) \
for ( bool loopvar = false; \
!loopvar && wxLog::IsLevelEnabled(wxLOG_##level, wxLOG_COMPONENT); \
#define wxDO_LOG_IF_ENABLED(level) \
wxDO_LOG_IF_ENABLED_HELPER(level, wxMAKE_UNIQUE_NAME(wxlogcheck))
#define wxDO_LOG_IF_ENABLED(level) \
wxDO_LOG_IF_ENABLED_HELPER(level, wxMAKE_UNIQUE_NAME(wxlogcheck))
// wxLogFatalError() is special as it can't be disabled
#define wxLogFatalError wxDO_LOG(FatalError)
// wxLogFatalError() is special as it can't be disabled
#define wxLogFatalError wxDO_LOG(FatalError)