зеркало из https://github.com/microsoft/STL.git
Родитель
045f3dd0e1
Коммит
d7f855891b
|
@ -463,7 +463,7 @@ public:
|
|||
}
|
||||
|
||||
~scoped_lock() noexcept {
|
||||
_For_each_tuple_element(_MyMutexes, [](auto& _Mutex) noexcept { _Mutex.unlock(); });
|
||||
_STD apply([](_Mutexes&... _Mtxes) { (..., (void) _Mtxes.unlock()); }, _MyMutexes);
|
||||
}
|
||||
|
||||
scoped_lock(const scoped_lock&) = delete;
|
||||
|
|
|
@ -969,21 +969,6 @@ _NODISCARD constexpr _Ty make_from_tuple(_Tuple&& _Tpl) { // construct _Ty from
|
|||
}
|
||||
#endif // _HAS_CXX17
|
||||
|
||||
// FUNCTION TEMPLATE _For_each_tuple_element
|
||||
template <class _Tpl, class _Fx, size_t... _Indices>
|
||||
void _For_each_tuple_element_impl(
|
||||
_Tpl&& _Tuple, _Fx _Func, index_sequence<_Indices...>) { // call _Func() on the _Indices elements of _Tuple
|
||||
int _Ignored[] = {(static_cast<void>(_Func(_STD get<_Indices>(_STD forward<_Tpl>(_Tuple)))), 0)...};
|
||||
(void) _Ignored;
|
||||
}
|
||||
|
||||
template <class _Tpl, class _Fx>
|
||||
void _For_each_tuple_element(_Tpl&& _Tuple, _Fx _Func) { // call _Func() on each element in _Tuple
|
||||
_For_each_tuple_element_impl(
|
||||
_STD forward<_Tpl>(_Tuple), _Func, make_index_sequence<tuple_size_v<remove_reference_t<_Tpl>>>());
|
||||
}
|
||||
|
||||
|
||||
// TEMPLATE CONSTRUCTOR pair::pair(tuple, tuple, sequence, sequence)
|
||||
template <class _Ty1, class _Ty2>
|
||||
template <class _Tuple1, class _Tuple2, size_t... _Indexes1, size_t... _Indexes2>
|
||||
|
|
|
@ -46,6 +46,19 @@ using namespace std;
|
|||
|
||||
int main() {} // COMPILE-ONLY
|
||||
|
||||
template <typename Tpl, typename Fx, size_t... Indices>
|
||||
void for_each_tuple_element_impl(Tpl&& Tuple, Fx Func, index_sequence<Indices...>) {
|
||||
// call Func() on the Indices elements of Tuple
|
||||
int ignored[] = {(static_cast<void>(Func(get<Indices>(forward<Tpl>(Tuple)))), 0)...};
|
||||
(void) ignored;
|
||||
}
|
||||
|
||||
template <typename Tpl, typename Fx>
|
||||
void for_each_tuple_element(Tpl&& Tuple, Fx Func) { // call Func() on each element in Tuple
|
||||
for_each_tuple_element_impl(
|
||||
forward<Tpl>(Tuple), Func, make_index_sequence<tuple_size_v<remove_reference_t<Tpl>>>{});
|
||||
}
|
||||
|
||||
// Use this type to ensure function templates are used instead
|
||||
// of regular member functions.
|
||||
template <typename T>
|
||||
|
@ -121,7 +134,7 @@ template <typename T>
|
|||
void construct_from_iterators_test(T value) {
|
||||
auto containers = get_all_iterator_types_for(value);
|
||||
|
||||
_For_each_tuple_element(containers, [](auto c) {
|
||||
for_each_tuple_element(containers, [](auto c) {
|
||||
T another(begin(c), end(c));
|
||||
T another2(begin(c), end(c));
|
||||
});
|
||||
|
@ -131,7 +144,7 @@ template <typename T>
|
|||
void construct_tree_containers_from_iterators_test(T value) {
|
||||
auto containers = get_all_iterator_types_for(value);
|
||||
|
||||
_For_each_tuple_element(containers, [&](auto c) {
|
||||
for_each_tuple_element(containers, [&](auto c) {
|
||||
T another(begin(c), end(c));
|
||||
T another2(begin(c), end(c), value.key_comp());
|
||||
T another3(begin(c), end(c), value.key_comp(), value.get_allocator());
|
||||
|
@ -142,7 +155,7 @@ template <typename T>
|
|||
void construct_hash_containers_from_iterators_test(T value) {
|
||||
auto containers = get_all_iterator_types_for(value);
|
||||
|
||||
_For_each_tuple_element(containers, [&](auto c) {
|
||||
for_each_tuple_element(containers, [&](auto c) {
|
||||
T another(begin(c), end(c));
|
||||
T another2(begin(c), end(c), value.bucket_count());
|
||||
T another3(begin(c), end(c), value.bucket_count(), value.hash_function());
|
||||
|
|
Загрузка…
Ссылка в новой задаче