@@ -320,7 +320,8 @@ template <typename T> class Callable<T, true> {
320320
321321// / Returns true if the given container only contains a single element.
322322template <typename ContainerTy> bool hasSingleElement (ContainerTy &&C) {
323- auto B = std::begin (C), E = std::end (C);
323+ auto B = adl_begin (C);
324+ auto E = adl_end (C);
324325 return B != E && std::next (B) == E;
325326}
326327
@@ -375,8 +376,7 @@ inline mapped_iterator<ItTy, FuncTy> map_iterator(ItTy I, FuncTy F) {
375376
376377template <class ContainerTy , class FuncTy >
377378auto map_range (ContainerTy &&C, FuncTy F) {
378- return make_range (map_iterator (std::begin (C), F),
379- map_iterator (std::end (C), F));
379+ return make_range (map_iterator (adl_begin (C), F), map_iterator (adl_end (C), F));
380380}
381381
382382// / A base type of mapped iterator, that is useful for building derived
@@ -572,11 +572,11 @@ iterator_range<filter_iterator<detail::IterOfRange<RangeT>, PredicateT>>
572572make_filter_range (RangeT &&Range, PredicateT Pred) {
573573 using FilterIteratorT =
574574 filter_iterator<detail::IterOfRange<RangeT>, PredicateT>;
575- return make_range (
576- FilterIteratorT (std::begin (std:: forward<RangeT>(Range)),
577- std::end ( std::forward<RangeT>(Range)), Pred ),
578- FilterIteratorT ( std::end (std::forward<RangeT>(Range)),
579- std::end (std::forward<RangeT>(Range)), Pred));
575+ return make_range (FilterIteratorT ( adl_begin (std::forward<RangeT>(Range)),
576+ adl_end (std::forward<RangeT>(Range)), Pred ),
577+ FilterIteratorT ( adl_end ( std::forward<RangeT>(Range)),
578+ adl_end (std::forward<RangeT>(Range)),
579+ Pred));
580580}
581581
582582// / A pseudo-iterator adaptor that is designed to implement "early increment"
@@ -656,8 +656,8 @@ iterator_range<early_inc_iterator_impl<detail::IterOfRange<RangeT>>>
656656make_early_inc_range (RangeT &&Range) {
657657 using EarlyIncIteratorT =
658658 early_inc_iterator_impl<detail::IterOfRange<RangeT>>;
659- return make_range (EarlyIncIteratorT (std::begin (std::forward<RangeT>(Range))),
660- EarlyIncIteratorT (std::end (std::forward<RangeT>(Range))));
659+ return make_range (EarlyIncIteratorT (adl_begin (std::forward<RangeT>(Range))),
660+ EarlyIncIteratorT (adl_end (std::forward<RangeT>(Range))));
661661}
662662
663663// Forward declarations required by zip_shortest/zip_equal/zip_first/zip_longest
@@ -1097,8 +1097,8 @@ class concat_iterator
10971097 // / We need the full range to know how to switch between each of the
10981098 // / iterators.
10991099 template <typename ... RangeTs>
1100- explicit concat_iterator (RangeTs &&... Ranges)
1101- : Begins(std::begin (Ranges)...), Ends(std::end (Ranges)...) {}
1100+ explicit concat_iterator (RangeTs &&...Ranges)
1101+ : Begins(adl_begin (Ranges)...), Ends(adl_end (Ranges)...) {}
11021102
11031103 using BaseT::operator ++;
11041104
@@ -1127,26 +1127,25 @@ template <typename ValueT, typename... RangeTs> class concat_range {
11271127public:
11281128 using iterator =
11291129 concat_iterator<ValueT,
1130- decltype (std::begin (std::declval<RangeTs &>()))...>;
1130+ decltype (adl_begin (std::declval<RangeTs &>()))...>;
11311131
11321132private:
11331133 std::tuple<RangeTs...> Ranges;
11341134
1135- template <size_t ... Ns>
1136- iterator begin_impl (std::index_sequence<Ns...>) {
1135+ template <size_t ... Ns> iterator begin_impl (std::index_sequence<Ns...>) {
11371136 return iterator (std::get<Ns>(Ranges)...);
11381137 }
11391138 template <size_t ... Ns>
11401139 iterator begin_impl (std::index_sequence<Ns...>) const {
11411140 return iterator (std::get<Ns>(Ranges)...);
11421141 }
11431142 template <size_t ... Ns> iterator end_impl (std::index_sequence<Ns...>) {
1144- return iterator (make_range (std::end (std::get<Ns>(Ranges)),
1145- std::end (std::get<Ns>(Ranges)))...);
1143+ return iterator (make_range (adl_end (std::get<Ns>(Ranges)),
1144+ adl_end (std::get<Ns>(Ranges)))...);
11461145 }
11471146 template <size_t ... Ns> iterator end_impl (std::index_sequence<Ns...>) const {
1148- return iterator (make_range (std::end (std::get<Ns>(Ranges)),
1149- std::end (std::get<Ns>(Ranges)))...);
1147+ return iterator (make_range (adl_end (std::get<Ns>(Ranges)),
1148+ adl_end (std::get<Ns>(Ranges)))...);
11501149 }
11511150
11521151public:
@@ -1420,7 +1419,7 @@ template <typename EltTy, typename FirstTy> class first_or_second_type {
14201419
14211420// / Given a container of pairs, return a range over the first elements.
14221421template <typename ContainerTy> auto make_first_range (ContainerTy &&c) {
1423- using EltTy = decltype ((*std::begin (c)));
1422+ using EltTy = decltype ((*adl_begin (c)));
14241423 return llvm::map_range (std::forward<ContainerTy>(c),
14251424 [](EltTy elt) -> typename detail::first_or_second_type<
14261425 EltTy, decltype ((elt.first ))>::type {
@@ -1430,7 +1429,7 @@ template <typename ContainerTy> auto make_first_range(ContainerTy &&c) {
14301429
14311430// / Given a container of pairs, return a range over the second elements.
14321431template <typename ContainerTy> auto make_second_range (ContainerTy &&c) {
1433- using EltTy = decltype ((*std::begin (c)));
1432+ using EltTy = decltype ((*adl_begin (c)));
14341433 return llvm::map_range (
14351434 std::forward<ContainerTy>(c),
14361435 [](EltTy elt) ->
@@ -2106,7 +2105,7 @@ template<typename Container, typename Range = std::initializer_list<
21062105 typename Container::value_type>>
21072106void replace (Container &Cont, typename Container::iterator ContIt,
21082107 typename Container::iterator ContEnd, Range R) {
2109- replace (Cont, ContIt, ContEnd, R. begin ( ), R. end ( ));
2108+ replace (Cont, ContIt, ContEnd, adl_begin (R ), adl_begin (R ));
21102109}
21112110
21122111// / An STL-style algorithm similar to std::for_each that applies a second
@@ -2519,19 +2518,19 @@ bool hasNItemsOrLess(
25192518
25202519// / Returns true if the given container has exactly N items
25212520template <typename ContainerTy> bool hasNItems (ContainerTy &&C, unsigned N) {
2522- return hasNItems (std::begin (C), std::end (C), N);
2521+ return hasNItems (adl_begin (C), adl_end (C), N);
25232522}
25242523
25252524// / Returns true if the given container has N or more items
25262525template <typename ContainerTy>
25272526bool hasNItemsOrMore (ContainerTy &&C, unsigned N) {
2528- return hasNItemsOrMore (std::begin (C), std::end (C), N);
2527+ return hasNItemsOrMore (adl_begin (C), adl_end (C), N);
25292528}
25302529
25312530// / Returns true if the given container has N or less items
25322531template <typename ContainerTy>
25332532bool hasNItemsOrLess (ContainerTy &&C, unsigned N) {
2534- return hasNItemsOrLess (std::begin (C), std::end (C), N);
2533+ return hasNItemsOrLess (adl_begin (C), adl_end (C), N);
25352534}
25362535
25372536// / Returns a raw pointer that represents the same address as the argument.
0 commit comments