summaryrefslogtreecommitdiffstats
path: root/libcxx
diff options
context:
space:
mode:
authorHoward Hinnant <hhinnant@apple.com>2011-03-09 17:17:06 +0000
committerHoward Hinnant <hhinnant@apple.com>2011-03-09 17:17:06 +0000
commit709b108ae117092d7d6a2c4abcd8f65918db81e3 (patch)
tree771b2f632e184d24d860ea1a3788c97ffeb7d350 /libcxx
parent20cbd059d46d62248abbb97288cb3f442aa1150b (diff)
downloadbcm5719-llvm-709b108ae117092d7d6a2c4abcd8f65918db81e3.tar.gz
bcm5719-llvm-709b108ae117092d7d6a2c4abcd8f65918db81e3.zip
Corrected const-correctness on nullptr type_traits, and beefed up the test for nullptr_t.
llvm-svn: 127338
Diffstat (limited to 'libcxx')
-rw-r--r--libcxx/include/type_traits15
-rw-r--r--libcxx/test/language.support/support.types/nullptr_t.pass.cpp15
2 files changed, 26 insertions, 4 deletions
diff --git a/libcxx/include/type_traits b/libcxx/include/type_traits
index d522b29a01d..bbcea859f75 100644
--- a/libcxx/include/type_traits
+++ b/libcxx/include/type_traits
@@ -211,6 +211,14 @@ template <> struct __is_void<void> : public true_type {};
template <class _Tp> struct _LIBCPP_VISIBLE is_void
: public __is_void<typename remove_cv<_Tp>::type> {};
+// __is_nullptr_t
+
+template <class _Tp> struct ____is_nullptr_t : public false_type {};
+template <> struct ____is_nullptr_t<nullptr_t> : public true_type {};
+
+template <class _Tp> struct _LIBCPP_VISIBLE __is_nullptr_t
+ : public ____is_nullptr_t<typename remove_cv<_Tp>::type> {};
+
// is_integral
template <class _Tp> struct __is_integral : public false_type {};
@@ -392,18 +400,17 @@ template <class _Tp> struct _LIBCPP_VISIBLE is_arithmetic
// is_fundamental
template <class _Tp> struct _LIBCPP_VISIBLE is_fundamental
- : public integral_constant<bool, is_void<_Tp>::value ||
+ : public integral_constant<bool, is_void<_Tp>::value ||
+ __is_nullptr_t<_Tp>::value ||
is_arithmetic<_Tp>::value> {};
-template <> struct _LIBCPP_VISIBLE is_fundamental<nullptr_t>
- : public true_type {};
-
// is_scalar
template <class _Tp> struct _LIBCPP_VISIBLE is_scalar
: public integral_constant<bool, is_arithmetic<_Tp>::value ||
is_member_pointer<_Tp>::value ||
is_pointer<_Tp>::value ||
+ __is_nullptr_t<_Tp>::value ||
is_enum<_Tp>::value > {};
template <> struct _LIBCPP_VISIBLE is_scalar<nullptr_t> : public true_type {};
diff --git a/libcxx/test/language.support/support.types/nullptr_t.pass.cpp b/libcxx/test/language.support/support.types/nullptr_t.pass.cpp
index 1e67faa8b7f..6c15fefdc48 100644
--- a/libcxx/test/language.support/support.types/nullptr_t.pass.cpp
+++ b/libcxx/test/language.support/support.types/nullptr_t.pass.cpp
@@ -41,4 +41,19 @@ int main()
assert(!(nullptr != nullptr));
assert(!(nullptr < nullptr));
assert(!(nullptr > nullptr));
+ A* a = nullptr;
+ assert(a == nullptr);
+ assert(a <= nullptr);
+ assert(a >= nullptr);
+ assert(!(a != nullptr));
+ assert(!(a < nullptr));
+ assert(!(a > nullptr));
+ assert(nullptr == a);
+ assert(nullptr <= a);
+ assert(nullptr >= a);
+ assert(!(nullptr != a));
+ assert(!(nullptr < a));
+ assert(!(nullptr > a));
+ std::ptrdiff_t i = reinterpret_cast<std::ptrdiff_t>(nullptr);
+ assert(i == 0);
}
OpenPOWER on IntegriCloud