fork download
  1. #include <iostream>
  2.  
  3. class Base
  4. {
  5. };
  6.  
  7. class Derived : public Base
  8. {
  9. };
  10.  
  11. template <typename T>
  12. typename std::enable_if<std::is_base_of<Base, T>::value>::type
  13. foo()
  14. {
  15. std::cout << "Derived from Base" << std::endl;
  16. }
  17.  
  18. template <typename T>
  19. typename std::enable_if<!std::is_base_of<Derived, T>::value>::type
  20. foo()
  21. {
  22. std::cout << "NOT derived from Base" << std::endl;
  23. }
  24.  
  25.  
  26. template <typename T> class MyClass
  27. {
  28. public:
  29. void f()
  30. {
  31. foo<T>();
  32. }
  33. };
  34.  
  35. int main()
  36. {
  37. MyClass<int> x;
  38. MyClass<Derived> y;
  39. x.f();
  40. y.f();
  41. }
  42.  
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
NOT derived from Base
Derived from Base