119119#define RAPIDJSON_NAMESPACE_END }
120120#endif
121121
122+ // /////////////////////////////////////////////////////////////////////////////
123+ // __cplusplus macro
124+
125+ // !@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN
126+
127+ #if defined(_MSC_VER)
128+ #define RAPIDJSON_CPLUSPLUS _MSVC_LANG
129+ #else
130+ #define RAPIDJSON_CPLUSPLUS __cplusplus
131+ #endif
132+
133+ // !@endcond
134+
122135// /////////////////////////////////////////////////////////////////////////////
123136// RAPIDJSON_HAS_STDSTRING
124137
@@ -527,8 +540,14 @@ RAPIDJSON_NAMESPACE_END
527540// /////////////////////////////////////////////////////////////////////////////
528541// C++11 features
529542
543+ #ifndef RAPIDJSON_HAS_CXX11
544+ #define RAPIDJSON_HAS_CXX11 (RAPIDJSON_CPLUSPLUS >= 201103L )
545+ #endif
546+
530547#ifndef RAPIDJSON_HAS_CXX11_RVALUE_REFS
531- #if defined(__clang__)
548+ #if RAPIDJSON_HAS_CXX11
549+ #define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1
550+ #elif defined(__clang__)
532551#if __has_feature(cxx_rvalue_references) && \
533552 (defined (_LIBCPP_VERSION) || defined (__GLIBCXX__) && __GLIBCXX__ >= 20080306 )
534553#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1
@@ -545,7 +564,9 @@ RAPIDJSON_NAMESPACE_END
545564#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS
546565
547566#ifndef RAPIDJSON_HAS_CXX11_NOEXCEPT
548- #if defined(__clang__)
567+ #if RAPIDJSON_HAS_CXX11
568+ #define RAPIDJSON_HAS_CXX11_NOEXCEPT 1
569+ #elif defined(__clang__)
549570#define RAPIDJSON_HAS_CXX11_NOEXCEPT __has_feature (cxx_noexcept)
550571#elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,6,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__))
551572// (defined(_MSC_VER) && _MSC_VER >= ????) // not yet supported
@@ -562,8 +583,12 @@ RAPIDJSON_NAMESPACE_END
562583
563584// no automatic detection, yet
564585#ifndef RAPIDJSON_HAS_CXX11_TYPETRAITS
586+ #if (defined(_MSC_VER) && _MSC_VER >= 1700)
587+ #define RAPIDJSON_HAS_CXX11_TYPETRAITS 1
588+ #else
565589#define RAPIDJSON_HAS_CXX11_TYPETRAITS 0
566590#endif
591+ #endif
567592
568593#ifndef RAPIDJSON_HAS_CXX11_RANGE_FOR
569594#if defined(__clang__)
0 commit comments