fork download
  1. /* This is the base case */
  2. template <typename T1, typename T2>
  3. auto sum(const T1& v1, const T2& v2) -> decltype( v1 + v2 )
  4. {
  5. return v1 + v2;
  6. }
  7.  
  8. /* And here is the recursive definition for left-associativity */
  9. template <typename T1, typename T2, typename... Ts>
  10. auto sum(const T1& v1, const T2& v2, const Ts&... rest) -> decltype( sum(v1 + v2, rest...) )
  11. {
  12. return sum(v1 + v2, rest... );
  13. }
  14.  
  15. int main(void)
  16. {
  17. return sum(1, 3, 5, 7, 9, 11);
  18. }
  19.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In function ‘int main()’:
prog.cpp:17:33: error: no matching function for call to ‘sum(int, int, int, int, int, int)’
prog.cpp:17:33: note: candidates are:
prog.cpp:3:6: note: template<class T1, class T2> decltype ((v1 + v2)) sum(const T1&, const T2&)
prog.cpp:3:6: note:   template argument deduction/substitution failed:
prog.cpp:17:33: note:   candidate expects 2 arguments, 6 provided
prog.cpp:10:6: note: template<class T1, class T2, class ... Ts> decltype (sum((v1 + v2), sum::rest ...)) sum(const T1&, const T2&, const Ts& ...)
prog.cpp:10:6: note:   template argument deduction/substitution failed:
prog.cpp: In substitution of ‘template<class T1, class T2, class ... Ts> decltype (sum((v1 + v2), rest ...)) sum(const T1&, const T2&, const Ts& ...) [with T1 = int; T2 = int; Ts = {int, int, int, int}]’:
prog.cpp:17:33:   required from here
prog.cpp:10:6: error: no matching function for call to ‘sum(int, const int&, const int&, const int&, const int&)’
prog.cpp:10:6: note: candidate is:
prog.cpp:3:6: note: template<class T1, class T2> decltype ((v1 + v2)) sum(const T1&, const T2&)
prog.cpp:3:6: note:   template argument deduction/substitution failed:
prog.cpp:10:6: note:   candidate expects 2 arguments, 5 provided
stdout
Standard output is empty