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
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 <stdexcept>
 #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.