Skip to content

Commit f93a29b

Browse files
committed
RAPIDJSON_STATIC_ASSERT: use C++11 static_assert, if available
1 parent fcd263c commit f93a29b

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

include/rapidjson/rapidjson.h

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@
4949
// token stringification
5050
#define RAPIDJSON_STRINGIFY(x) RAPIDJSON_DO_STRINGIFY(x)
5151
#define RAPIDJSON_DO_STRINGIFY(x) #x
52+
53+
// token concatenation
54+
#define RAPIDJSON_JOIN(X, Y) RAPIDJSON_DO_JOIN(X, Y)
55+
#define RAPIDJSON_DO_JOIN(X, Y) RAPIDJSON_DO_JOIN2(X, Y)
56+
#define RAPIDJSON_DO_JOIN2(X, Y) X##Y
5257
//!@endcond
5358

5459
/*! \def RAPIDJSON_MAJOR_VERSION
@@ -405,7 +410,15 @@ RAPIDJSON_NAMESPACE_END
405410
///////////////////////////////////////////////////////////////////////////////
406411
// RAPIDJSON_STATIC_ASSERT
407412

408-
// Adopt from boost
413+
// Prefer C++11 static_assert, if available
414+
#ifndef RAPIDJSON_STATIC_ASSERT
415+
#if __cplusplus >= 201103L || ( defined(_MSC_VER) && _MSC_VER >= 1800 )
416+
#define RAPIDJSON_STATIC_ASSERT(x) \
417+
static_assert(x, RAPIDJSON_STRINGIFY(x))
418+
#endif // C++11
419+
#endif // RAPIDJSON_STATIC_ASSERT
420+
421+
// Adopt C++03 implementation from boost
409422
#ifndef RAPIDJSON_STATIC_ASSERT
410423
#ifndef __clang__
411424
//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN
@@ -416,10 +429,6 @@ template <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; };
416429
template<int x> struct StaticAssertTest {};
417430
RAPIDJSON_NAMESPACE_END
418431

419-
#define RAPIDJSON_JOIN(X, Y) RAPIDJSON_DO_JOIN(X, Y)
420-
#define RAPIDJSON_DO_JOIN(X, Y) RAPIDJSON_DO_JOIN2(X, Y)
421-
#define RAPIDJSON_DO_JOIN2(X, Y) X##Y
422-
423432
#if defined(__GNUC__)
424433
#define RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE __attribute__((unused))
425434
#else
@@ -438,7 +447,7 @@ RAPIDJSON_NAMESPACE_END
438447
typedef ::RAPIDJSON_NAMESPACE::StaticAssertTest< \
439448
sizeof(::RAPIDJSON_NAMESPACE::STATIC_ASSERTION_FAILURE<bool(x) >)> \
440449
RAPIDJSON_JOIN(StaticAssertTypedef, __LINE__) RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE
441-
#endif
450+
#endif // RAPIDJSON_STATIC_ASSERT
442451

443452
///////////////////////////////////////////////////////////////////////////////
444453
// RAPIDJSON_LIKELY, RAPIDJSON_UNLIKELY

0 commit comments

Comments
 (0)