fork download
  1. #include <iostream>
  2. #include <type_traits>
  3.  
  4. template<typename T>
  5. typename std::enable_if<std::is_polymorphic<T>::value, void*>::type
  6. startOfObject(T* p)
  7. {
  8. std::cout << "is polymorphic" << std::endl;
  9. return dynamic_cast<void*>(p);
  10. }
  11.  
  12. template<typename T>
  13. typename std::enable_if<!std::is_polymorphic<T>::value, void*>::type
  14. startOfObject(T* p)
  15. {
  16. std::cout << "is not polymorphic" << std::endl;
  17. return static_cast<void*>(p);
  18. }
  19.  
  20. class C {};
  21. class Polymorphic { public: virtual ~Polymorphic() {} };
  22.  
  23.  
  24. int main() {
  25. C c;
  26. Polymorphic p;
  27.  
  28. startOfObject(&c);
  29. startOfObject(&p);
  30. return 0;
  31. }
  32.  
  33.  
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
is not polymorphic
is polymorphic