Do not deduce the return type of `unique,remove[_if]` of `[forward_]list` (#4975)

This commit is contained in:
张英奇 Zhang Yingqi 2024-09-29 04:09:35 +08:00 коммит произвёл GitHub
Родитель 97e52d104c
Коммит 722e1507c8
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
3 изменённых файлов: 14 добавлений и 8 удалений

Просмотреть файл

@ -1208,12 +1208,12 @@ public:
_Nodeptr* _Tail;
};
auto remove(const _Ty& _Val) { // erase each element matching _Val
_LIST_REMOVE_RETURN remove(const _Ty& _Val) { // erase each element matching _Val
return remove_if([&](const _Ty& _Other) -> bool { return _Other == _Val; });
}
template <class _Pr1>
auto remove_if(_Pr1 _Pred) { // erase each element satisfying _Pr1
_LIST_REMOVE_RETURN remove_if(_Pr1 _Pred) { // erase each element satisfying _Pr1
_Flist_node_remove_op _Op(*this);
auto _Firstb = _Unchecked_before_begin();
size_type _Removed = 0;
@ -1235,12 +1235,12 @@ public:
#endif
}
auto unique() { // erase each element matching previous
_LIST_REMOVE_RETURN unique() { // erase each element matching previous
return unique(equal_to<>{});
}
template <class _Pr2>
auto unique(_Pr2 _Pred) { // erase each element satisfying _Pred with previous
_LIST_REMOVE_RETURN unique(_Pr2 _Pred) { // erase each element satisfying _Pred with previous
_Flist_node_remove_op _Op(*this);
auto _First = _Unchecked_begin();
size_type _Removed = 0;

Просмотреть файл

@ -1662,12 +1662,12 @@ public:
_Nodeptr* _Tail;
};
auto remove(const _Ty& _Val) { // erase each element matching _Val
_LIST_REMOVE_RETURN remove(const _Ty& _Val) { // erase each element matching _Val
return remove_if([&](const _Ty& _Other) -> bool { return _Other == _Val; });
}
template <class _Pr1>
auto remove_if(_Pr1 _Pred) { // erase each element satisfying _Pred
_LIST_REMOVE_RETURN remove_if(_Pr1 _Pred) { // erase each element satisfying _Pred
auto& _My_data = _Mypair._Myval2;
_List_node_remove_op _Op(*this);
const auto _Last = _My_data._Myhead;
@ -1688,12 +1688,12 @@ public:
#endif
}
auto unique() { // erase each element matching previous
_LIST_REMOVE_RETURN unique() { // erase each element matching previous
return unique(equal_to<>{});
}
template <class _Pr2>
auto unique(_Pr2 _Pred) { // erase each element satisfying _Pred with previous
_LIST_REMOVE_RETURN unique(_Pr2 _Pred) { // erase each element satisfying _Pred with previous
_List_node_remove_op _Op(*this);
const _Nodeptr _Phead = _Mypair._Myval2._Myhead;
_Nodeptr _Pprev = _Phead->_Next;

Просмотреть файл

@ -2649,6 +2649,12 @@ _STD_END
#define _CONTAINER_EMPLACE_RETURN void
#endif // ^^^ !_HAS_CXX17 ^^^
#if _HAS_CXX20
#define _LIST_REMOVE_RETURN size_type
#else // ^^^ _HAS_CXX20 ^^^ / vvv !_HAS_CXX20 vvv
#define _LIST_REMOVE_RETURN void
#endif // ^^^ !_HAS_CXX20 ^^^
#pragma pop_macro("new")
_STL_RESTORE_CLANG_WARNINGS
#pragma warning(pop)