fork download
  1. #include <iostream>
  2.  
  3. template <typename Func>
  4. void apply(Func&& f, ...) { std::cout << "default\n"; }
  5.  
  6. template <typename Func, typename T>
  7. auto apply(Func&& f, T&& t) -> decltype(f(std::forward<T>(t))) {
  8. return f(std::forward<T>(t));
  9. }
  10.  
  11.  
  12. struct Foo {};
  13. struct Bar {};
  14.  
  15. struct F {
  16. void operator()(Foo) { std::cout << "Foo\n"; }
  17. void operator()(Bar) { std::cout << "Bar\n"; }
  18. };
  19.  
  20. int main() {
  21. F f;
  22. Foo foo;
  23. Bar bar;
  24. int i;
  25. apply(f, foo);
  26. apply(f, bar);
  27. apply(f, i);
  28. }
Success #stdin #stdout 0s 2828KB
stdin
Standard input is empty
stdout
Foo
Bar
default