mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-31 09:32:11 +00:00
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
This commit is contained in:
parent
4e5b0f9943
commit
a1eb50fe3d
@ -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)))
|
||||
};
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user