diff --git a/include/type_traits b/include/type_traits index 4e6c200b8..e9fd18a87 100644 --- a/include/type_traits +++ b/include/type_traits @@ -600,11 +600,7 @@ template struct _LIBCPP_VISIBLE is_abstract : public __libcpp_abstra namespace __is_convertible_imp { -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES -template char __test(const volatile typename remove_reference<_Tp>::type&&); -#else template char __test(_Tp); -#endif template __two __test(...); #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES template _Tp&& __source(); diff --git a/test/utilities/meta/meta.rel/is_convertible.pass.cpp b/test/utilities/meta/meta.rel/is_convertible.pass.cpp index 1c63f9fb0..8d0566899 100644 --- a/test/utilities/meta/meta.rel/is_convertible.pass.cpp +++ b/test/utilities/meta/meta.rel/is_convertible.pass.cpp @@ -16,6 +16,10 @@ typedef void Function(); typedef char Array[1]; +class NonCopyable { + NonCopyable(NonCopyable&); +}; + int main() { { @@ -366,4 +370,15 @@ int main() static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); } + { + static_assert((std::is_convertible::value), ""); + static_assert((std::is_convertible::value), ""); + static_assert((std::is_convertible::value), ""); + static_assert((std::is_convertible::value), ""); + static_assert((std::is_convertible::value), ""); + static_assert((std::is_convertible::value), ""); + static_assert((std::is_convertible::value), ""); + static_assert((std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + } }