fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void HelloWorld1(string var1, const char* var2)
  5. {
  6. cout << var1 << " " << var2 << endl;
  7. }
  8.  
  9. int HelloWorld2(string var1, const char* var2)
  10. {
  11. cout << var1 << " " << var2 << endl;
  12. return 5;
  13. }
  14.  
  15. template<typename Fn, typename... Args>
  16. auto CallFunction(Fn fn, Args&&... args) -> typename enable_if<is_same<void, decay_t<decltype(fn(forward<Args>(args)...))>>::value, decltype(fn(forward<Args>(args)...))>::type
  17. {
  18. fn(forward<Args>(args)...);
  19. }
  20.  
  21. template<typename Fn, typename... Args>
  22. auto CallFunction(Fn fn, Args&&... args) -> typename enable_if<!is_same<void, decay_t<decltype(fn(forward<Args>(args)...))>>::value, decltype(fn(forward<Args>(args)...))>::type
  23. {
  24. return fn(forward<Args>(args)...);
  25. }
  26.  
  27. int main()
  28. {
  29. CallFunction(HelloWorld1, "Hello", "World 1!");
  30. CallFunction(HelloWorld2, "Hello", "World 2!");
  31.  
  32. // your code goes here
  33. return 0;
  34. }
Success #stdin #stdout 0s 3416KB
stdin
Standard input is empty
stdout
Hello World 1!
Hello World 2!