diff --git a/include/rapidjson/internal/meta.h b/include/rapidjson/internal/meta.h index 62d5224..b19a9f4 100644 --- a/include/rapidjson/internal/meta.h +++ b/include/rapidjson/internal/meta.h @@ -21,6 +21,11 @@ #ifndef RAPIDJSON_INTERNAL_META_H_ #define RAPIDJSON_INTERNAL_META_H_ +#ifdef __GNUC__ +RAPIDJSON_DIAG_PUSH +RAPIDJSON_DIAG_OFF(effc++) +#endif + //@cond RAPIDJSON_INTERNAL namespace rapidjson { namespace internal { @@ -94,4 +99,8 @@ template struct RemoveSfinaeFptr { typedef } // namespace rapidjson //@endcond +#ifdef __GNUC__ +RAPIDJSON_DIAG_POP +#endif + #endif // RAPIDJSON_INTERNAL_META_H_ diff --git a/include/rapidjson/reader.h b/include/rapidjson/reader.h index 49a2fb0..25c286b 100644 --- a/include/rapidjson/reader.h +++ b/include/rapidjson/reader.h @@ -26,6 +26,7 @@ #include "rapidjson.h" #include "encodings.h" +#include "internal/meta.h" #include "internal/pow10.h" #include "internal/stack.h" @@ -120,25 +121,25 @@ concept Handler { //! Default implementation of Handler. /*! This can be used as base class of any reader handler. - \note implements Handler concept + \note implements Handler concept */ -template > +template, typename Derived = void> struct BaseReaderHandler { - typedef typename Encoding::Ch Ch; + typedef typename Encoding::Ch Ch; - bool Default() { return true; } - bool Null() { return Default(); } - bool Bool(bool) { return Default(); } - bool Int(int) { return Default(); } - bool Uint(unsigned) { return Default(); } - bool Int64(int64_t) { return Default(); } - bool Uint64(uint64_t) { return Default(); } - bool Double(double) { return Default(); } - bool String(const Ch*, SizeType, bool) { return Default(); } - bool StartObject() { return Default(); } - bool EndObject(SizeType) { return Default(); } - bool StartArray() { return Default(); } - bool EndArray(SizeType) { return Default(); } + bool Default() { return true; } + bool Null() { return static_cast(*this).Default(); } + bool Bool(bool) { return static_cast(*this).Default(); } + bool Int(int) { return static_cast(*this).Default(); } + bool Uint(unsigned) { return static_cast(*this).Default(); } + bool Int64(int64_t) { return static_cast(*this).Default(); } + bool Uint64(uint64_t) { return static_cast(*this).Default(); } + bool Double(double) { return static_cast(*this).Default(); } + bool String(const Ch*, SizeType, bool) { return static_cast(*this).Default(); } + bool StartObject() { return static_cast(*this).Default(); } + bool EndObject(SizeType) { return static_cast(*this).Default(); } + bool StartArray() { return static_cast(*this).Default(); } + bool EndArray(SizeType) { return static_cast(*this).Default(); } }; ///////////////////////////////////////////////////////////////////////////////