PROTON-1324: c++ correct implementation of proton::is_signed<char>

This uses std::numeric_limits<char> to get the platform setting, which works on
C++03 and should be portable.
diff --git a/proton-c/bindings/cpp/include/proton/internal/type_traits.hpp b/proton-c/bindings/cpp/include/proton/internal/type_traits.hpp
index ee49a15..3d66f94 100644
--- a/proton-c/bindings/cpp/include/proton/internal/type_traits.hpp
+++ b/proton-c/bindings/cpp/include/proton/internal/type_traits.hpp
@@ -30,6 +30,7 @@
 #include "./config.hpp"
 #include "../types_fwd.hpp"
 #include "../type_id.hpp"
+#include <limits>
 
 namespace proton {
 namespace internal {
@@ -47,7 +48,7 @@
 template <class T> struct is_signed : public false_type {};
 
 template <> struct is_integral<char> : public true_type {};
-template <> struct is_signed<char> : public false_type {};
+template <> struct is_signed<char> { static const bool value = std::numeric_limits<char>::is_signed; };
 
 template <> struct is_integral<unsigned char> : public true_type {};
 template <> struct is_integral<unsigned short> : public true_type {};