diff --git a/README.md b/README.md
index 91bb1e0d..fff191be 100644
--- a/README.md
+++ b/README.md
@@ -386,6 +386,7 @@ I deeply appreciate the help of the following people.
 - [ZahlGraf](https://github.com/ZahlGraf) added a workaround that allows compilation using Android NDK.
 - [whackashoe](https://github.com/whackashoe) replaced a function that was marked as unsafe by Visual Studio.
 - [406345](https://github.com/406345) fixed two small warnings.
+- [Glen Fernandes](https://github.com/glenfe) noted a potential portability problem in the `has_mapped_type` function.
 
 Thanks a lot for helping out!
 
diff --git a/src/json.hpp b/src/json.hpp
index 82fa3b24..c9fe4ebc 100644
--- a/src/json.hpp
+++ b/src/json.hpp
@@ -94,9 +94,9 @@ struct has_mapped_type
 {
   private:
     template<typename C> static char test(typename C::mapped_type*);
-    template<typename C> static int  test(...);
+    template<typename C> static char (&test(...))[2];
   public:
-    enum { value = sizeof(test<T>(0)) == sizeof(char) };
+    static constexpr bool value = sizeof(test<T>(0)) == 1;
 };
 
 /// "equality" comparison for floating point numbers
diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c
index 0dfa6737..d9d696ae 100644
--- a/src/json.hpp.re2c
+++ b/src/json.hpp.re2c
@@ -94,9 +94,9 @@ struct has_mapped_type
 {
   private:
     template<typename C> static char test(typename C::mapped_type*);
-    template<typename C> static int  test(...);
+    template<typename C> static char (&test(...))[2];
   public:
-    enum { value = sizeof(test<T>(0)) == sizeof(char) };
+    static constexpr bool value = sizeof(test<T>(0)) == 1;
 };
 
 /// "equality" comparison for floating point numbers