fork download
  1. #include <iostream>
  2. #include <type_traits>
  3. using namespace std;
  4.  
  5. typedef unsigned long mySize;
  6.  
  7. //default
  8. template <class P, class dummy = void>
  9. class T{
  10. public:
  11. static P f(){return 0;}
  12. };
  13.  
  14. //int
  15. template <>
  16. class T<int,void> {
  17. public:
  18. static int f(){return 1;}
  19. };
  20.  
  21. //unsigned long
  22. template <>
  23. class T<unsigned long, void> {
  24. public:
  25. static unsigned long f(){return 2;}
  26. };
  27.  
  28. template <class P>
  29. class T<P, typename enable_if<is_same<P, mySize>::value && !is_same<P, unsigned long>::value, void>::type> {
  30. public:
  31. static P f(){return 3;}
  32. };
  33.  
  34. int main() {
  35. cout << T<int>::f() << endl;
  36. cout << T<unsigned long>::f() << endl;
  37. cout << T<mySize>::f() << endl;
  38. return 0;
  39. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
1
2
2