fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template<typename... T>
  5. int add(T... ints)
  6. {
  7. int result = 0;
  8. using expand_variadic_pack = int[]; // dirty trick, see below
  9. (void)expand_variadic_pack{0, ((result += ints), void(), 0)... };
  10. // first void: silence variable unused warning
  11. // uses braced-init-list initialization rules, which evaluates
  12. // the elements inside a braced-init-list IN ORDER, to repetetively
  13. // execute a certain operation
  14. // second void is to prevent malicious "operator," overloads, which
  15. // cannot exist for void types
  16. // 0 at the end is to handle empty variadic pack (zero-size array initializer is illegal.
  17. return result;
  18. }
  19.  
  20. int main()
  21. {
  22. std::cout << add(1,2,3,4) << '\n';
  23. std::cout << add() << '\n';
  24. }
Success #stdin #stdout 0s 4296KB
stdin
Standard input is empty
stdout
10
0