fork(5) download
  1. #include <iostream>
  2. #include <vector>
  3. #include <list>
  4. #include <type_traits>
  5. #include <iterator>
  6.  
  7. template<typename Iterator, typename U = typename std::vector<typename std::iterator_traits<Iterator>::value_type>::iterator, typename = void>
  8. auto f(Iterator beg, Iterator end)
  9. -> typename std::enable_if<!std::is_same<Iterator, U>::value, void>::type
  10. {
  11. for(auto it = beg; it != end; it = std::next(it))
  12. {
  13. std::cout << *it << " iterator!" << std::endl;
  14. }
  15. }
  16.  
  17. template<typename Iterator, typename U = typename std::vector<typename std::iterator_traits<Iterator>::value_type>::iterator>
  18. auto f(Iterator beg, U end)
  19. -> typename std::enable_if<std::is_same<Iterator, U>::value, void>::type
  20. {
  21. for(auto it = beg; it != end; it = std::next(it))
  22. {
  23. std::cout << *it << " vector!" << std::endl;
  24. }
  25. }
  26.  
  27. int main()
  28. {
  29. std::list<int> x = {1,2,3};
  30. std::cout << "List" << std::endl;
  31. f(x.begin(), x.end());
  32.  
  33. std::cout << "Vector" << std::endl;
  34. std::vector<int> v = {1,2,3};
  35. f(v.begin(), v.end());
  36. }
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
List
1 iterator!
2 iterator!
3 iterator!
Vector
1 vector!
2 vector!
3 vector!