fork download
  1. #include <iostream>
  2. #include <type_traits>
  3.  
  4. using namespace std;
  5.  
  6. template<typename T>
  7. const char* describe(T,
  8. typename enable_if<is_integral<T>::value>::type* = 0)
  9. {
  10. return "integral";
  11. }
  12.  
  13. template<typename T>
  14. const char* describe(T,
  15. typename std::enable_if<is_floating_point<T>::value>::type* = 0)
  16. {
  17. return "floating_point";
  18. }
  19.  
  20. template<typename T>
  21. const char* describe(T,
  22. typename std::enable_if<!std::is_integral<T>::value && !std::is_floating_point<T>::value && std::is_pod<T>::value>::type* = 0)
  23. {
  24. return "pod";
  25. }
  26.  
  27. struct pod {};
  28.  
  29. int main(void)
  30. {
  31. std::cout << describe(7) << std::endl;
  32. std::cout << describe(7.0f) << std::endl;
  33. std::cout << describe(pod()) << std::endl;
  34. }
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
integral
floating_point
pod