18#ifndef LLVM_ADT_ITERATOR_RANGE_H 
   19#define LLVM_ADT_ITERATOR_RANGE_H 
   31template <
typename IteratorT>
 
   33  IteratorT begin_iterator, end_iterator;
 
   35  template <
typename From, 
typename To>
 
   36  using explicitly_converted_t = 
decltype(
static_cast<To
>(
 
   37      std::declval<std::add_rvalue_reference_t<From>>()));
 
   40#if defined(__GNUC__) &&                                                       \ 
   41    (__GNUC__ == 7 || (__GNUC__ == 8 && __GNUC_MINOR__ < 4)) 
   44  template <
typename Container>
 
   46  template <
typename Container,
 
   47            std::void_t<explicitly_converted_t<
 
   54      : begin_iterator(
std::
move(begin_iterator)),
 
   55        end_iterator(
std::
move(end_iterator)) {}
 
 
   57  IteratorT 
begin()
 const { 
return begin_iterator; }
 
   58  IteratorT 
end()
 const { 
return end_iterator; }
 
   59  bool empty()
 const { 
return begin_iterator == end_iterator; }
 
 
   62template <
typename Container>
 
A range adaptor for a pair of iterators.
iterator_range(IteratorT begin_iterator, IteratorT end_iterator)
iterator_range(Container &&c)
decltype(adl_begin(std::declval< RangeT & >())) IterOfRange
This is an optimization pass for GlobalISel generic memory operations.
constexpr auto adl_begin(RangeT &&range) -> decltype(adl_detail::begin_impl(std::forward< RangeT >(range)))
Returns the begin iterator to range using std::begin and function found through Argument-Dependent Lo...
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
constexpr auto adl_end(RangeT &&range) -> decltype(adl_detail::end_impl(std::forward< RangeT >(range)))
Returns the end iterator to range using std::end and functions found through Argument-Dependent Looku...
iterator_range(Container &&) -> iterator_range< llvm::detail::IterOfRange< Container > >
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
Implement std::hash so that hash_code can be used in STL containers.