Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 22 additions & 3 deletions stl/inc/memory
Original file line number Diff line number Diff line change
Expand Up @@ -1464,12 +1464,31 @@ struct _Can_call_function_object : false_type {};
template <class _Fx, class _Arg>
struct _Can_call_function_object<_Fx, _Arg, void_t<decltype(_STD declval<_Fx>()(_STD declval<_Arg>()))>> : true_type {};

template <class _Yty, class _Ty>
template <class _Yty, class _Ty, class = void>
struct _SP_convertible : is_convertible<_Yty*, _Ty*>::type {};

template <class _Yty, class _Uty, class _Void>
struct _SP_convertible<_Yty, _Uty[], _Void> : false_type {};
#if defined(__clang__) || defined(__EDG__) // TRANSITION, DevCom-10548086
template <class _Yty, class _Uty>
struct _SP_convertible<_Yty, _Uty[], void_t<_Yty (*)[]>> : is_convertible<_Yty (*)[], _Uty (*)[]>::type {};
#else // ^^^ no workaround / workaround vvv
template <class _Yty, class _Uty>
struct _SP_convertible<_Yty, _Uty[]> : is_convertible<_Yty (*)[], _Uty (*)[]>::type {};
struct _SP_convertible<_Yty, _Uty[], void_t<decltype(static_cast<_Yty (*)[]>(nullptr))>>
: is_convertible<_Yty (*)[], _Uty (*)[]>::type {};
#endif // ^^^ workaround ^^^

template <class _Yty, class _Uty, size_t _Ext, class _Void>
struct _SP_convertible<_Yty, _Uty[_Ext], _Void> : false_type {};
#if defined(__clang__) || defined(__EDG__) // TRANSITION, DevCom-10548086
template <class _Yty, class _Uty, size_t _Ext>
struct _SP_convertible<_Yty, _Uty[_Ext], void_t<_Yty (*)[_Ext]>>
: is_convertible<_Yty (*)[_Ext], _Uty (*)[_Ext]>::type {};
#else // ^^^ no workaround / workaround vvv
template <class _Yty, class _Uty, size_t _Ext>
struct _SP_convertible<_Yty, _Uty[_Ext]> : is_convertible<_Yty (*)[_Ext], _Uty (*)[_Ext]>::type {};
struct _SP_convertible<_Yty, _Uty[_Ext], void_t<decltype(static_cast<_Yty (*)[_Ext]>(nullptr))>>
: is_convertible<_Yty (*)[_Ext], _Uty (*)[_Ext]>::type {};
#endif // ^^^ workaround ^^^

template <class _Yty, class _Ty>
struct _SP_pointer_compatible : is_convertible<_Yty*, _Ty*>::type {
Expand Down
6 changes: 0 additions & 6 deletions tests/libcxx/expected_results.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down