forked from OSchip/llvm-project
Implement [over.ics.rank]p4: A conversion that does not convert an std::nullptr_t to bool is better than one than does.
llvm-svn: 118269
This commit is contained in:
parent
f7f4f50113
commit
7da7cc568f
|
@ -190,6 +190,7 @@ bool StandardConversionSequence::isPointerConversionToBool() const {
|
|||
(getFromType()->isPointerType() ||
|
||||
getFromType()->isObjCObjectPointerType() ||
|
||||
getFromType()->isBlockPointerType() ||
|
||||
getFromType()->isNullPtrType() ||
|
||||
First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer))
|
||||
return true;
|
||||
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++0x -ffreestanding %s
|
||||
#include <stdint.h>
|
||||
|
||||
// Don't have decltype yet.
|
||||
typedef __typeof__(nullptr) nullptr_t;
|
||||
typedef decltype(nullptr) nullptr_t;
|
||||
|
||||
struct A {};
|
||||
|
||||
|
@ -69,3 +68,19 @@ template <int *PI, void (*PF)(), int A::*PM, void (A::*PMF)()>
|
|||
struct T {};
|
||||
|
||||
typedef T<nullptr, nullptr, nullptr, nullptr> NT;
|
||||
|
||||
namespace test1 {
|
||||
template<typename T, typename U> struct is_same {
|
||||
static const bool value = false;
|
||||
};
|
||||
|
||||
template<typename T> struct is_same<T, T> {
|
||||
static const bool value = true;
|
||||
};
|
||||
|
||||
void *g(void*);
|
||||
bool g(bool);
|
||||
|
||||
// Test that we prefer g(void*) over g(bool).
|
||||
static_assert(is_same<decltype(g(nullptr)), void*>::value, "");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue