aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/google/protobuf/stubs/type_traits.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/google/protobuf/stubs/type_traits.h')
-rw-r--r--src/google/protobuf/stubs/type_traits.h11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/google/protobuf/stubs/type_traits.h b/src/google/protobuf/stubs/type_traits.h
index f5365c38..b58cae3f 100644
--- a/src/google/protobuf/stubs/type_traits.h
+++ b/src/google/protobuf/stubs/type_traits.h
@@ -103,7 +103,7 @@ template <class T> struct remove_reference;
template <class T> struct add_reference;
template <class T> struct remove_pointer;
template <class T, class U> struct is_same;
-#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
+#if !(defined(__GNUC__) && __GNUC__ <= 3)
template <class From, class To> struct is_convertible;
#endif
@@ -322,7 +322,7 @@ template<typename T, typename U> struct is_same : public false_type { };
template<typename T> struct is_same<T, T> : public true_type { };
// Specified by TR1 [4.6] Relationships between types
-#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
+#if !(defined(__GNUC__) && __GNUC__ <= 3)
namespace type_traits_internal {
// This class is an implementation detail for is_convertible, and you
@@ -339,6 +339,9 @@ struct ConvertHelper {
static small_ Test(To);
static big_ Test(...);
static From Create();
+ enum {
+ value = sizeof(Test(Create())) == sizeof(small_)
+ };
};
} // namespace type_traits_internal
@@ -346,9 +349,7 @@ struct ConvertHelper {
template <typename From, typename To>
struct is_convertible
: integral_constant<bool,
- sizeof(type_traits_internal::ConvertHelper<From, To>::Test(
- type_traits_internal::ConvertHelper<From, To>::Create()))
- == sizeof(small_)> {
+ type_traits_internal::ConvertHelper<From, To>::value> {
};
#endif