Index: base/template_util.h |
diff --git a/base/template_util.h b/base/template_util.h |
index 0408fc67a6e45a76664d0400126f139dbffab061..e48af9183b5a5e3255f169eb6ed31b7d6c0885e1 100644 |
--- a/base/template_util.h |
+++ b/base/template_util.h |
@@ -47,8 +47,6 @@ struct NoType { |
YesType dummy[2]; |
}; |
-#if !defined(OS_WIN) |
- |
// This class is an implementation detail for is_convertible, and you |
// don't need to know how it works to use is_convertible. For those |
// who care: we declare two different functions, one whose argument is |
@@ -58,15 +56,17 @@ struct NoType { |
// had called it with an argument of type From. See Alexandrescu's |
// _Modern C++ Design_ for more details on this sort of trick. |
-template <typename From, typename To> |
struct ConvertHelper { |
+ template <typename To> |
static YesType Test(To); |
+ |
+ template <typename To> |
static NoType Test(...); |
+ |
+ template <typename From> |
static From Create(); |
}; |
-#endif // !defined(OS_WIN) |
- |
// Used to determine if a type is a struct/union/class. Inspired by Boost's |
// is_class type_trait implementation. |
struct IsClassHelper { |
@@ -79,19 +79,18 @@ struct IsClassHelper { |
} // namespace internal |
-#if !defined(OS_WIN) |
- |
// Inherits from true_type if From is convertible to To, false_type otherwise. |
+// |
+// Note that if the type is convertible, this will be a true_type REGARDLESS |
+// of whether or not the conversion would emit a warning. |
template <typename From, typename To> |
struct is_convertible |
: integral_constant<bool, |
- sizeof(internal::ConvertHelper<From, To>::Test( |
- internal::ConvertHelper<From, To>::Create())) |
- == sizeof(internal::YesType)> { |
+ sizeof(internal::ConvertHelper::Test<To>( |
+ internal::ConvertHelper::Create<From>())) == |
+ sizeof(internal::YesType)> { |
}; |
-#endif // !defined(OS_WIN) |
- |
template <typename T> |
struct is_class |
: integral_constant<bool, |