49
49
// token stringification
50
50
#define RAPIDJSON_STRINGIFY (x ) RAPIDJSON_DO_STRINGIFY(x)
51
51
#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
52
57
// !@endcond
53
58
54
59
/* ! \def RAPIDJSON_MAJOR_VERSION
@@ -405,7 +410,15 @@ RAPIDJSON_NAMESPACE_END
405
410
// /////////////////////////////////////////////////////////////////////////////
406
411
// RAPIDJSON_STATIC_ASSERT
407
412
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
409
422
#ifndef RAPIDJSON_STATIC_ASSERT
410
423
#ifndef __clang__
411
424
// !@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN
@@ -416,10 +429,6 @@ template <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; };
416
429
template <int x> struct StaticAssertTest {};
417
430
RAPIDJSON_NAMESPACE_END
418
431
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
-
423
432
#if defined(__GNUC__)
424
433
#define RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE __attribute__ ((unused))
425
434
#else
@@ -438,7 +447,7 @@ RAPIDJSON_NAMESPACE_END
438
447
typedef ::RAPIDJSON_NAMESPACE::StaticAssertTest< \
439
448
sizeof (::RAPIDJSON_NAMESPACE::STATIC_ASSERTION_FAILURE<bool (x) >)> \
440
449
RAPIDJSON_JOIN (StaticAssertTypedef, __LINE__) RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE
441
- #endif
450
+ #endif // RAPIDJSON_STATIC_ASSERT
442
451
443
452
// /////////////////////////////////////////////////////////////////////////////
444
453
// RAPIDJSON_LIKELY, RAPIDJSON_UNLIKELY
0 commit comments