diff --git a/llvm/include/llvm/ADT/STLExtras.h b/llvm/include/llvm/ADT/STLExtras.h --- a/llvm/include/llvm/ADT/STLExtras.h +++ b/llvm/include/llvm/ADT/STLExtras.h @@ -214,16 +214,14 @@ using std::begin; -template -decltype(auto) adl_begin(ContainerTy &&container) { - return begin(std::forward(container)); +template auto adl_begin(ContainerTy &&container) { + return begin(container); } using std::end; -template -decltype(auto) adl_end(ContainerTy &&container) { - return end(std::forward(container)); +template auto adl_end(ContainerTy &&container) { + return end(container); } using std::swap; @@ -231,25 +229,23 @@ template void adl_swap(T &&lhs, T &&rhs) noexcept(noexcept(swap(std::declval(), std::declval()))) { - swap(std::forward(lhs), std::forward(rhs)); + swap(lhs, rhs); } } // end namespace adl_detail -template -decltype(auto) adl_begin(ContainerTy &&container) { - return adl_detail::adl_begin(std::forward(container)); +template auto adl_begin(ContainerTy &&container) { + return adl_detail::adl_begin(container); } -template -decltype(auto) adl_end(ContainerTy &&container) { - return adl_detail::adl_end(std::forward(container)); +template auto adl_end(ContainerTy &&container) { + return adl_detail::adl_end(container); } template void adl_swap(T &&lhs, T &&rhs) noexcept( noexcept(adl_detail::adl_swap(std::declval(), std::declval()))) { - adl_detail::adl_swap(std::forward(lhs), std::forward(rhs)); + adl_detail::adl_swap(lhs, rhs); } /// Test whether \p RangeOrContainer is empty. Similar to C++17 std::empty. @@ -489,11 +485,8 @@ make_filter_range(RangeT &&Range, PredicateT Pred) { using FilterIteratorT = filter_iterator, PredicateT>; - return make_range( - FilterIteratorT(std::begin(std::forward(Range)), - std::end(std::forward(Range)), Pred), - FilterIteratorT(std::end(std::forward(Range)), - std::end(std::forward(Range)), Pred)); + return make_range(FilterIteratorT(std::begin(Range), std::end(Range), Pred), + FilterIteratorT(std::end(Range), std::end(Range), Pred)); } /// A pseudo-iterator adaptor that is designed to implement "early increment" @@ -575,8 +568,8 @@ make_early_inc_range(RangeT &&Range) { using EarlyIncIteratorT = early_inc_iterator_impl>; - return make_range(EarlyIncIteratorT(std::begin(std::forward(Range))), - EarlyIncIteratorT(std::end(std::forward(Range)))); + return make_range(EarlyIncIteratorT(std::begin(Range)), + EarlyIncIteratorT(std::end(Range))); } // forward declarations required by zip_shortest/zip_first/zip_longest diff --git a/llvm/include/llvm/ADT/iterator.h b/llvm/include/llvm/ADT/iterator.h --- a/llvm/include/llvm/ADT/iterator.h +++ b/llvm/include/llvm/ADT/iterator.h @@ -291,7 +291,7 @@ pointee_iterator() = default; template pointee_iterator(U &&u) - : pointee_iterator::iterator_adaptor_base(std::forward(u)) {} + : pointee_iterator::iterator_adaptor_base(std::forward(u)) {} T &operator*() const { return **this->I; } }; @@ -301,8 +301,8 @@ iterator_range> make_pointee_range(RangeT &&Range) { using PointeeIteratorT = pointee_iterator; - return make_range(PointeeIteratorT(std::begin(std::forward(Range))), - PointeeIteratorT(std::end(std::forward(Range)))); + return make_range(PointeeIteratorT(std::begin(Range)), + PointeeIteratorT(std::end(Range))); } template > make_pointer_range(RangeT &&Range) { using PointerIteratorT = pointer_iterator; - return make_range(PointerIteratorT(std::begin(std::forward(Range))), - PointerIteratorT(std::end(std::forward(Range)))); + return make_range(PointerIteratorT(std::begin(Range)), + PointerIteratorT(std::end(Range))); } template