|
@@ -598,12 +598,12 @@ template <class _Tp> struct _LIBCPP_VISIBLE is_abstract : public __libcpp_abstra
|
|
|
|
|
|
// is_convertible
|
|
// is_convertible
|
|
|
|
|
|
-#ifdef __clang__
|
|
|
|
|
|
+#if __has_feature(is_convertible_to)
|
|
|
|
|
|
template <class _T1, class _T2> struct _LIBCPP_VISIBLE is_convertible
|
|
template <class _T1, class _T2> struct _LIBCPP_VISIBLE is_convertible
|
|
: public integral_constant<bool, __is_convertible_to(_T1, _T2)> {};
|
|
: public integral_constant<bool, __is_convertible_to(_T1, _T2)> {};
|
|
|
|
|
|
-#else // __clang__
|
|
|
|
|
|
+#else // __has_feature(is_convertible_to)
|
|
|
|
|
|
namespace __is_convertible_imp
|
|
namespace __is_convertible_imp
|
|
{
|
|
{
|
|
@@ -705,17 +705,17 @@ template <class _T1, class _T2> struct _LIBCPP_VISIBLE is_convertible
|
|
static const size_t __complete_check2 = __is_convertible_check<_T2>::__v;
|
|
static const size_t __complete_check2 = __is_convertible_check<_T2>::__v;
|
|
};
|
|
};
|
|
|
|
|
|
-#endif // __clang__
|
|
|
|
|
|
+#endif // __has_feature(is_convertible_to)
|
|
|
|
|
|
// is_base_of
|
|
// is_base_of
|
|
|
|
|
|
-#ifdef __clang__
|
|
|
|
|
|
+#ifdef __has_feature(is_base_of)
|
|
|
|
|
|
template <class _Bp, class _Dp>
|
|
template <class _Bp, class _Dp>
|
|
struct _LIBCPP_VISIBLE is_base_of
|
|
struct _LIBCPP_VISIBLE is_base_of
|
|
: public integral_constant<bool, __is_base_of(_Bp, _Dp)> {};
|
|
: public integral_constant<bool, __is_base_of(_Bp, _Dp)> {};
|
|
|
|
|
|
-#else // __clang__
|
|
|
|
|
|
+#else // __has_feature(is_base_of)
|
|
|
|
|
|
// (C) Copyright Rani Sharoni 2003.
|
|
// (C) Copyright Rani Sharoni 2003.
|
|
// Use, modification and distribution are subject to the Boost Software License,
|
|
// Use, modification and distribution are subject to the Boost Software License,
|
|
@@ -763,7 +763,7 @@ struct _LIBCPP_VISIBLE is_base_of
|
|
{
|
|
{
|
|
};
|
|
};
|
|
|
|
|
|
-#endif // __clang__
|
|
|
|
|
|
+#endif // __has_feature(is_base_of)
|
|
|
|
|
|
// is_empty
|
|
// is_empty
|
|
|
|
|