fork download
  1. #include <iterator>
  2. #include <vector>
  3.  
  4. template <class Iterator> class range;
  5.  
  6. template <class Iterator, class Category> class range_base;
  7.  
  8. template <class I>
  9. class range_base<I, std::random_access_iterator_tag> {
  10. protected:
  11. range_base() : begin_(), end_() {}
  12.  
  13. template <class I1>
  14. range_base(I1 begin, I1 end) : begin_(begin), end_(end) {}
  15.  
  16. I begin_;
  17. I end_;
  18. };
  19.  
  20. template <class I>
  21. class range : public range_base<I, typename std::iterator_traits<I>::iterator_category> {
  22. using base_type = range_base<I, typename std::iterator_traits<I>::iterator_category>;
  23. public:
  24. range() {}
  25.  
  26. template <class Iterator>
  27. range(Iterator first, Iterator last) : base_type(first, last) {}
  28. };
  29.  
  30. template <class Iterator>
  31. range<Iterator> make_range(Iterator first, Iterator last) {
  32. return range<Iterator>(first, last);
  33. }
  34.  
  35. int main() {
  36. std::vector<int> v = {3, 2};
  37. auto r = make_range(v.begin(), v.end());
  38. return 0;
  39. }
  40.  
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
Standard output is empty