fork download
  1. #include <iostream>
  2. #include <list>
  3. #include <vector>
  4.  
  5. template <typename T>
  6. class test
  7. {
  8. public:
  9. template <typename I>
  10. auto call(I first, I last) const
  11. -> decltype(T()(first, last))
  12. {
  13. return T()(first, last);
  14. }
  15. };
  16.  
  17. template <typename T>
  18. struct sum
  19. {
  20. template <typename I>
  21. T operator()(I first, I last) const
  22. {
  23. T res = 0;
  24. while (first != last)
  25. {
  26. res += *first;
  27. ++first;
  28. }
  29. return res;
  30. }
  31. };
  32.  
  33. int main()
  34. {
  35. test<sum<double>> t;
  36. double a[] {1.,2.,3.};
  37. std::cout << "Test (array) => " << t.call(a, a+3) << std::endl;
  38. std::vector<double> v {1.,2.,3.};
  39. std::cout << "Test (vector) => " << t.call(v.begin(), v.end()) << std::endl;
  40. std::list<double> l {1.,2.,3.};
  41. std::cout << "Test (list) => " << t.call(l.begin(), l.end()) << std::endl;
  42. }
  43.  
  44.  
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
Test (array) => 6
Test (vector) => 6
Test (list) => 6