fork(1) download
  1. #include <iostream>
  2. #include <type_traits>
  3.  
  4. class A {};
  5.  
  6. class B : public A {};
  7.  
  8. class X {};
  9.  
  10. class Y : public X {};
  11.  
  12. class Other {};
  13.  
  14. template <typename Param, std::enable_if_t<std::is_base_of<A, Param>::value, bool> = true>
  15. void doStuff() { std::cout << "Base A" << std::endl; }
  16.  
  17. template <typename Param, std::enable_if_t<std::is_base_of<X, Param>::value, bool> = true>
  18. void doStuff() { std::cout << "Base X" << std::endl; }
  19.  
  20. template <typename Param, std::enable_if_t<!(std::is_base_of<A, Param>::value || std::is_base_of<X, Param>::value), bool> = true>
  21. void doStuff() { std::cout << "Something else" << std::endl; }
  22.  
  23. int main()
  24. {
  25. doStuff<B>();
  26. doStuff<Y>();
  27. doStuff<Other>();
  28. }
Success #stdin #stdout 0.01s 5544KB
stdin
Standard input is empty
stdout
Base A
Base X
Something else