fork download
  1. #include <iostream>
  2. #include <type_traits>
  3.  
  4. using namespace std;
  5.  
  6. class C
  7. {
  8. private:
  9. class integral {};
  10. class floatingpoint {};
  11.  
  12. template<typename T>
  13. using SelectOverload =
  14. typename conditional<
  15. is_integral<T>::value,
  16. integral,
  17. typename conditional<is_floating_point<T>::value,
  18. floatingpoint,
  19. void
  20. >::type
  21. >::type;
  22.  
  23. public:
  24. template<typename T>
  25. explicit C(T&& value) { init(forward<T>(value), SelectOverload<T>()); }
  26.  
  27. private:
  28. template<typename T>
  29. void init(T&& value, integral) { cout << "integral" << std::endl; }
  30. template<typename T>
  31. void init(T&& value, floatingpoint) { cout << "floating point" << std::endl; }
  32.  
  33. };
  34.  
  35. int main()
  36. {
  37. C a(1);
  38. C b(1.0);
  39. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
integral
floating point