<div dir="ltr">Tricky to locally scope the using directive when using the expression in the return type - but STLExtras.h now has adl_begin/adl_end that handles this - so you could switch it over to those & add some tests if you like :)</div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jun 12, 2018 at 1:55 PM Justin Bogner <<a href="mailto:mail@justinbogner.com">mail@justinbogner.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">David Blaikie <<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>> writes:<br>
> Author: dblaikie<br>
> Date: Tue Jul 21 13:37:12 2015<br>
> New Revision: 242823<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=242823&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=242823&view=rev</a><br>
> Log:<br>
> Add some utilities to iterator_range for trimming a range and<br>
> constructing one from a container.<br>
><br>
> To be used in clang in a follow-up commit.<br>
><br>
> Modified:<br>
>     llvm/trunk/include/llvm/ADT/iterator_range.h<br>
><br>
> Modified: llvm/trunk/include/llvm/ADT/iterator_range.h<br>
> URL:<br>
> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/iterator_range.h?rev=242823&r1=242822&r2=242823&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/iterator_range.h?rev=242823&r1=242822&r2=242823&view=diff</a><br>
> ==============================================================================<br>
><br>
> --- llvm/trunk/include/llvm/ADT/iterator_range.h (original)<br>
> +++ llvm/trunk/include/llvm/ADT/iterator_range.h Tue Jul 21 13:37:12 2015<br>
> @@ -20,6 +20,7 @@<br>
>  #define LLVM_ADT_ITERATOR_RANGE_H<br>
>  <br>
>  #include <utility><br>
> +#include <iterator><br>
>  <br>
>  namespace llvm {<br>
>  <br>
> @@ -32,6 +33,12 @@ class iterator_range {<br>
>    IteratorT begin_iterator, end_iterator;<br>
>  <br>
>  public:<br>
> +  //TODO: Add SFINAE to test that the Container's iterators match the range's<br>
> +  //      iterators.<br>
> +  template <typename Container><br>
> +  iterator_range(Container &&c)<br>
> +  //TODO: Consider ADL/non-member begin/end calls.<br>
> +      : begin_iterator(c.begin()), end_iterator(c.end()) {}<br>
>    iterator_range(IteratorT begin_iterator, IteratorT end_iterator)<br>
>        : begin_iterator(std::move(begin_iterator)),<br>
>          end_iterator(std::move(end_iterator)) {}<br>
> @@ -51,6 +58,11 @@ template <class T> iterator_range<T> mak<br>
>  template <typename T> iterator_range<T> make_range(std::pair<T, T> p) {<br>
>    return iterator_range<T>(std::move(p.first), std::move(p.second));<br>
>  }<br>
> +<br>
> +template<typename T><br>
> +iterator_range<decltype(begin(std::declval<T>()))> drop_begin(T &&t, int n) {<br>
> +  return make_range(std::next(begin(t), n), end(t));<br>
<br>
Sorry for the commit necromancy, but should these be std::begin and<br>
std::end, or perhaps have locally scoped using directives? As is this<br>
doesn't seem to work for llvm:: types like SmallVector.<br>
<br>
> +}<br>
>  }<br>
>  <br>
>  #endif<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>