fork(1) download
  1. #include <iostream>
  2. #include <utility>
  3. #include <typeinfo>
  4.  
  5. struct A{};
  6. struct B{};
  7.  
  8. struct X
  9. {
  10. double f(A&);
  11. int* f(B&);
  12. };
  13.  
  14. double X::f(A&) { return 0; }
  15. int* X::f(B&) { return 0; }
  16.  
  17. template<typename T, typename R = decltype(std::declval<X>().f(std::declval<T&>()))>
  18. R ff(T& arg)
  19. {
  20. std::cout << typeid(R).name() << std::endl;
  21. X x;
  22. R r = x.f(arg); // preferably if I can create local variables of type R here
  23. return r;
  24. }
  25.  
  26. int main()
  27. {
  28. A a; ff(a);
  29. B b; ff(b);
  30. return 0;
  31. }
Success #stdin #stdout 0s 3140KB
stdin
Standard input is empty
stdout
d
Pi