fork download
  1. #include <iostream>
  2. #include <array>
  3. #include <numeric>
  4. #include <cmath>
  5.  
  6. template <typename T, unsigned S>
  7. struct vec {
  8. T v[S];
  9.  
  10. T const* begin() const { return v; }
  11. T const* end() const { return v+S; }
  12.  
  13. auto length() const-> decltype(std::sqrt(std::declval<T>()))
  14. {
  15. auto square = [](T const& a, T const& b){return a+b*b;};
  16. T sum_of_squares = std::accumulate(begin(), end(), T{}, square);
  17. return std::sqrt(sum_of_squares);
  18. }
  19. };
  20.  
  21. int main()
  22. {
  23. vec<int, 3> v = {{2,1,2}};
  24. std::cout << v.length() << '\n';
  25.  
  26. vec<int, 2> v2 = {{6,8}};
  27. std::cout << v2.length() << '\n';
  28. }
  29.  
Success #stdin #stdout 0s 2884KB
stdin
Standard input is empty
stdout
3
10