fork(1) download
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. template <typename T, typename... Ts>
  6. struct same {
  7. using type = typename same<T, typename same<Ts...>::type>::type;
  8. };
  9. template <typename T>
  10. struct same<T, T> {
  11. using type = T;
  12. };
  13. template <typename T, std::size_t N>
  14. struct same<T, T[N]> {
  15. using type = T;
  16. };
  17. template <typename T, std::size_t N>
  18. struct same<T[N], T[N]> {
  19. using type = T;
  20. };
  21. template <typename T, std::size_t N>
  22. struct same<T[N], T> {
  23. using type = T;
  24. };
  25.  
  26. template <typename T>
  27. T sum(const T &v) { return v; }
  28.  
  29. template <typename T, std::size_t N>
  30. T sum(const T (&v)[N]) {
  31. return std::accumulate(std::begin(v), std::end(v), T{});
  32. }
  33.  
  34. template <typename T, typename TT, typename... Ts>
  35. typename same<T, TT, Ts...>::type sum(const T &v, const TT &w, const Ts&... rest) {
  36. return sum(v) + sum(w,rest...);
  37. }
  38.  
  39. int main() {
  40. int a[] = {1,2,3};
  41. cout << sum(1,a,1);
  42.  
  43. return 0;
  44. }
Success #stdin #stdout 0s 3096KB
stdin
Standard input is empty
stdout
8