From e88f577da1bf6a95d3b9e8a70c12922caca109eb Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Wed, 1 Jun 2011 17:25:11 +0000 Subject: [PATCH] Turning on cxx_nullptr exposed a latent bug in is_function, causing nullptr to wrongly classify as a function. Fixed. llvm-svn: 132406 --- libcxx/include/type_traits | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/libcxx/include/type_traits b/libcxx/include/type_traits index 3ad7d86557ac..e7bb1eb34cbe 100644 --- a/libcxx/include/type_traits +++ b/libcxx/include/type_traits @@ -328,6 +328,11 @@ template struct _LIBCPP_VISIBLE is_class #endif +// is_same + +template struct _LIBCPP_VISIBLE is_same : public false_type {}; +template struct _LIBCPP_VISIBLE is_same<_Tp, _Tp> : public true_type {}; + // is_function namespace __is_function_imp @@ -340,7 +345,8 @@ template _Tp& __source(); template ::value || is_union<_Tp>::value || is_void<_Tp>::value || - is_reference<_Tp>::value> + is_reference<_Tp>::value || + is_same<_Tp, nullptr_t>::value > struct __is_function : public integral_constant(__is_function_imp::__source<_Tp>())) == 1> {}; @@ -591,11 +597,6 @@ template struct _LIBCPP_VISIBLE remove_all_extents<_Tp[]> template struct _LIBCPP_VISIBLE remove_all_extents<_Tp[_Np]> {typedef typename remove_all_extents<_Tp>::type type;}; -// is_same - -template struct _LIBCPP_VISIBLE is_same : public false_type {}; -template struct _LIBCPP_VISIBLE is_same<_Tp, _Tp> : public true_type {}; - // is_abstract namespace __is_abstract_imp