diff options
| author | Howard Hinnant <hhinnant@apple.com> | 2011-03-09 17:17:06 +0000 |
|---|---|---|
| committer | Howard Hinnant <hhinnant@apple.com> | 2011-03-09 17:17:06 +0000 |
| commit | 709b108ae117092d7d6a2c4abcd8f65918db81e3 (patch) | |
| tree | 771b2f632e184d24d860ea1a3788c97ffeb7d350 /libcxx | |
| parent | 20cbd059d46d62248abbb97288cb3f442aa1150b (diff) | |
| download | bcm5719-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_traits | 15 | ||||
| -rw-r--r-- | libcxx/test/language.support/support.types/nullptr_t.pass.cpp | 15 |
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); } |

