diff --git a/stl/inc/memory b/stl/inc/memory index d982b01e72f..8b528752403 100644 --- a/stl/inc/memory +++ b/stl/inc/memory @@ -1464,12 +1464,31 @@ struct _Can_call_function_object : false_type {}; template struct _Can_call_function_object<_Fx, _Arg, void_t()(_STD declval<_Arg>()))>> : true_type {}; -template +template struct _SP_convertible : is_convertible<_Yty*, _Ty*>::type {}; + +template +struct _SP_convertible<_Yty, _Uty[], _Void> : false_type {}; +#if defined(__clang__) || defined(__EDG__) // TRANSITION, DevCom-10548086 +template +struct _SP_convertible<_Yty, _Uty[], void_t<_Yty (*)[]>> : is_convertible<_Yty (*)[], _Uty (*)[]>::type {}; +#else // ^^^ no workaround / workaround vvv template -struct _SP_convertible<_Yty, _Uty[]> : is_convertible<_Yty (*)[], _Uty (*)[]>::type {}; +struct _SP_convertible<_Yty, _Uty[], void_t(nullptr))>> + : is_convertible<_Yty (*)[], _Uty (*)[]>::type {}; +#endif // ^^^ workaround ^^^ + +template +struct _SP_convertible<_Yty, _Uty[_Ext], _Void> : false_type {}; +#if defined(__clang__) || defined(__EDG__) // TRANSITION, DevCom-10548086 +template +struct _SP_convertible<_Yty, _Uty[_Ext], void_t<_Yty (*)[_Ext]>> + : is_convertible<_Yty (*)[_Ext], _Uty (*)[_Ext]>::type {}; +#else // ^^^ no workaround / workaround vvv template -struct _SP_convertible<_Yty, _Uty[_Ext]> : is_convertible<_Yty (*)[_Ext], _Uty (*)[_Ext]>::type {}; +struct _SP_convertible<_Yty, _Uty[_Ext], void_t(nullptr))>> + : is_convertible<_Yty (*)[_Ext], _Uty (*)[_Ext]>::type {}; +#endif // ^^^ workaround ^^^ template struct _SP_pointer_compatible : is_convertible<_Yty*, _Ty*>::type { diff --git a/tests/libcxx/expected_results.txt b/tests/libcxx/expected_results.txt index 3f938e603a9..37dd361ebb7 100644 --- a/tests/libcxx/expected_results.txt +++ b/tests/libcxx/expected_results.txt @@ -1250,12 +1250,6 @@ std/ranges/range.adaptors/range.split/general.pass.cpp:1 FAIL std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/compare.pass.cpp:0 FAIL std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/compare.pass.cpp:1 FAIL -# Not analyzed. -# MSVC error C2087: 'abstract declarator': missing subscript -# Clang error: array has incomplete element type 'int[]' -std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer.pass.cpp FAIL -std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer.pass.cpp FAIL - # Not analyzed. SKIPPED because this is x86-specific, fatal error C1060: compiler is out of heap space std/algorithms/alg.modifying.operations/alg.transform/ranges.transform.binary.iterator.pass.cpp:0 SKIPPED std/algorithms/alg.modifying.operations/alg.transform/ranges.transform.binary.iterator.pass.cpp:1 SKIPPED