fork(1) download
  1. #include <iostream>
  2. #include <type_traits>
  3.  
  4. struct MyClass {
  5. virtual void debug () const {
  6. std::cout << "MyClass" << std::endl;
  7. };
  8. };
  9.  
  10. struct MyClassDer : public MyClass {
  11. virtual void debug () const {
  12. std::cout << "MyClassDer" << std::endl;
  13. };
  14. };
  15.  
  16. template <
  17. typename T
  18. >
  19. void func (const T& t, typename std::enable_if<!std::is_base_of<MyClass, T>::value>::type * = nullptr) {
  20. std::cout << "func template" << std::endl;
  21. }
  22.  
  23. template <
  24. typename T
  25. , typename = typename std::enable_if<std::is_base_of<MyClass, T>::value>::type
  26. >
  27. void func (const T& t) {
  28. std::cout << "func overloaded" << std::endl;
  29. t.debug ();
  30. }
  31.  
  32.  
  33. int main(int argc, char **argv) {
  34. func (1);
  35. MyClass myClass;
  36. func (myClass);
  37. MyClassDer myClassDer;
  38. func (myClassDer);
  39. }
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
func template
func overloaded
MyClass
func overloaded
MyClassDer