fork download
  1. #include <cassert>
  2. #include <utility>
  3.  
  4. using std::declval;
  5.  
  6.  
  7. /**** example starts here ****/
  8.  
  9. template <typename T, typename... Rest> struct sum_type {
  10. using type = decltype(
  11. declval<T>() + declval<typename sum_type<Rest...>::type>());
  12. };
  13. template <typename T> struct sum_type<T> { using type = T; };
  14.  
  15. template <typename T> T sum(const T &x) { return x; }
  16. template <typename T, typename... Rest>
  17. typename sum_type<T, Rest...>::type sum(const T &x, const Rest &... rest) {
  18. return x + sum(rest...);
  19. }
  20.  
  21.  
  22. int main() {
  23. assert(sum(3, 2, 4) == 9);
  24. assert(sum(1, 2, 4, 4.5) == 11.5);
  25. }
  26.  
Success #stdin #stdout 0s 4200KB
stdin
Standard input is empty
stdout
Standard output is empty