[llvm-commits] [llvm] r152220 - /llvm/trunk/include/llvm/Support/type_traits.h

Chandler Carruth chandlerc at gmail.com
Wed Mar 7 02:05:35 PST 2012


Author: chandlerc
Date: Wed Mar  7 04:05:35 2012
New Revision: 152220

URL: http://llvm.org/viewvc/llvm-project?rev=152220&view=rev
Log:
Switch the is_integral_or_enum trait machinery to use an explicit
template argument and an *implicit* conversion from '0' to a null
pointer. For some bizarre reason, GCC 4.3.2 thinks that the cast to
'(T*)' is invalid inside of an enumerator's value... which it isn't but
whatever. ;] This pattern is used elsewhere in the type_traits header
and so hopefully will survive the wrath of the build bots.

Modified:
    llvm/trunk/include/llvm/Support/type_traits.h

Modified: llvm/trunk/include/llvm/Support/type_traits.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/type_traits.h?rev=152220&r1=152219&r2=152220&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/type_traits.h (original)
+++ llvm/trunk/include/llvm/Support/type_traits.h Wed Mar  7 04:05:35 2012
@@ -133,7 +133,7 @@
   // types (or with nullptr_t in C++11).
   template <typename U, U u = U()> struct check1_return_type { char c[2]; };
   template <typename U> static check1_return_type<U> checker1(U*);
-  static char checker1(...);
+  template <typename U> static char checker1(...);
 
   // Form a return type that can only be instantiated with nullptr_t in C++11
   // mode. It's harmless in C++98 mode, but this allows us to filter nullptr_t
@@ -143,12 +143,12 @@
   template <typename U, nonce* u = U()>
   struct check2_return_type { char c[2]; };
   template <typename U> static check2_return_type<U> checker2(U*);
-  static char checker2(...);
+  template <typename U> static char checker2(...);
 
 public:
   enum {
-    value = (sizeof(char) != sizeof(checker1((T*)0)) &&
-             sizeof(char) == sizeof(checker2((T*)0)))
+    value = (sizeof(char) != sizeof(checker1<T>(0)) &&
+             sizeof(char) == sizeof(checker2<T>(0)))
   };
 };
 





More information about the llvm-commits mailing list