summaryrefslogtreecommitdiff
path: root/include/llvm/Support/type_traits.h
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2012-03-07 10:05:35 +0000
committerChandler Carruth <chandlerc@gmail.com>2012-03-07 10:05:35 +0000
commita1eb50fe3d8213156c77ef2f7ae5c4ad629dbb95 (patch)
tree2f12bd506de5bc23d5d068ea17fddf4c3c9d115d /include/llvm/Support/type_traits.h
parent4e5b0f994305643638eb206a9d95f182abf99772 (diff)
downloadllvm-a1eb50fe3d8213156c77ef2f7ae5c4ad629dbb95.tar.gz
llvm-a1eb50fe3d8213156c77ef2f7ae5c4ad629dbb95.tar.bz2
llvm-a1eb50fe3d8213156c77ef2f7ae5c4ad629dbb95.tar.xz
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152220 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Support/type_traits.h')
-rw-r--r--include/llvm/Support/type_traits.h8
1 files changed, 4 insertions, 4 deletions
diff --git a/include/llvm/Support/type_traits.h b/include/llvm/Support/type_traits.h
index a76344c098..3296c070c0 100644
--- a/include/llvm/Support/type_traits.h
+++ b/include/llvm/Support/type_traits.h
@@ -133,7 +133,7 @@ template <typename T> class is_integral_or_enum {
// 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 T> class is_integral_or_enum {
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)))
};
};