fork download
  1. #include <iostream>
  2. #include <cstdint>
  3. using namespace std;
  4.  
  5. template<typename T, typename Ti>
  6. T somefunc_impl(T* a, T* b)
  7. {
  8. Ti ai = *a;
  9. Ti bi = *b;
  10. return T(ai/bi);
  11. }
  12.  
  13. template<typename T>
  14. T somefunc(T* a, T* b, typename std::enable_if<std::is_floating_point<T>::value >::type* = 0)
  15. {
  16. return somefunc_impl<T, double>(a, b);
  17. }
  18.  
  19. template<typename T>
  20. T somefunc(T* a, T* b, typename std::enable_if<!std::is_floating_point<T>::value >::type* = 0)
  21. {
  22. return somefunc_impl<T, int64_t>(a, b);
  23. }
  24.  
  25. int main() {
  26. {
  27. float a = 3.0;
  28. float b = 2.0;
  29. cout << somefunc(&a, &b) << endl;
  30. }
  31. {
  32. short a = 3;
  33. short b = 2;
  34. cout << somefunc(&a, &b) << endl;
  35. }
  36. return 0;
  37. }
  38.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
1.5
1