fork(6) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. #include <type_traits>
  5.  
  6. template <typename T>
  7. struct foo
  8. {
  9. template <typename U = T>
  10. typename std::enable_if<sizeof(U) && (false == std::is_same<T, long>::value)>::type
  11. //typename std::enable_if<false == std::is_same<U, long>::value>::type
  12. bar1 (int)
  13. {cout<<"bar1\n"; }
  14.  
  15. template <typename U = T>
  16. typename std::enable_if<sizeof(U) && (false == std::is_same<T, long>::value), int>::type
  17. //typename std::enable_if<false == std::is_same<U, long>::value, int>::type
  18. bar2 ()
  19. { cout<<"bar2\n"; return 0; }
  20. };
  21.  
  22. int main()
  23. {
  24. foo<int> fi;
  25. foo<long> fl;
  26.  
  27. fi.bar1(0); // compile
  28. fi.bar2(); // compile
  29.  
  30. //fl.bar1<int>(0); // compilation error
  31. // fl.bar2(); // compilation error
  32. }
  33.  
Success #stdin #stdout 0s 4508KB
stdin
Standard input is empty
stdout
bar1
bar2