From b3e6f3d70fae1ea47bd86ff864204c0416bfd980 Mon Sep 17 00:00:00 2001 From: Christopher Dunn Date: Thu, 5 Mar 2015 15:19:43 -0600 Subject: [PATCH] drop `do{}while(0)` idiom Rationale: * http://stackoverflow.com/questions/154136/do-while-and-if-else-statements-in-c-c-macros/154138#154138 But Visual Studio issues a warning: `warning C4127: conditional expression is constant` * http://stackoverflow.com/questions/1946445/c-c-how-to-use-the-do-while0-construct-without-compiler-warnings-like-c412 --- include/json/assertions.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/include/json/assertions.h b/include/json/assertions.h index a88ac0a..d5fd661 100644 --- a/include/json/assertions.h +++ b/include/json/assertions.h @@ -16,11 +16,15 @@ #if JSON_USE_EXCEPTION #include #define JSON_ASSERT(condition) \ - if (!(condition)) {throw std::logic_error( "assert json failed" );} // @todo <= add detail about condition in exception -#define JSON_FAIL_MESSAGE(message) do{std::ostringstream oss; oss << message; throw std::logic_error(oss.str());}while(0) + {if (!(condition)) {throw std::logic_error( "assert json failed" );}} // @todo <= add detail about condition in exception +#define JSON_FAIL_MESSAGE(message) \ + { \ + std::ostringstream oss; oss << message; \ + throw std::logic_error(oss.str()); \ + } //#define JSON_FAIL_MESSAGE(message) throw std::logic_error(message) #else // JSON_USE_EXCEPTION -#define JSON_ASSERT(condition) assert(condition); +#define JSON_ASSERT(condition) assert(condition) // The call to assert() will show the failure message in debug builds. In // release bugs we abort, for a core-dump or debugger.