diff --git a/src/json.hpp b/src/json.hpp index 78cc7093..dece61dc 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -113,10 +113,13 @@ template<typename T> struct has_mapped_type { private: - template<typename C> static char test(typename C::mapped_type*); - template<typename C> static char (&test(...))[2]; + template <typename U, typename = typename U::mapped_type> + static int detect(U&&); + + static void detect(...); public: - static constexpr bool value = sizeof(test<T>(0)) == 1; + static constexpr bool value = + std::is_integral<decltype(detect(std::declval<T>()))>::value; }; /*! diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 61196844..4f8adfd3 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -113,10 +113,13 @@ template<typename T> struct has_mapped_type { private: - template<typename C> static char test(typename C::mapped_type*); - template<typename C> static char (&test(...))[2]; + template <typename U, typename = typename U::mapped_type> + static int detect(U&&); + + static void detect(...); public: - static constexpr bool value = sizeof(test<T>(0)) == 1; + static constexpr bool value = + std::is_integral<decltype(detect(std::declval<T>()))>::value; }; /*!