fork(3) download
  1. #include <iostream>
  2. #include <type_traits>
  3.  
  4. struct Dummy {};
  5.  
  6. template<typename T>
  7. class Base {};
  8.  
  9. class DerivedInt : public Base<int> {};
  10.  
  11. class DerivedDummy : public Base<Dummy> {};
  12.  
  13. template<typename E>
  14. class DerivedGeneric : public Base<E> {};
  15.  
  16. template <class T>
  17. std::true_type is_derived_from_base_t_impl(const Base<T>* impl);
  18.  
  19. std::false_type is_derived_from_base_t_impl(...);
  20.  
  21. template <class Derived>
  22. using is_derived_from_base_t = decltype(is_derived_from_base_t_impl(std::declval<Derived*>()));
  23.  
  24. int main()
  25. {
  26. std::cout<< is_derived_from_base_t< DerivedInt >() <<"\n";
  27. std::cout<< is_derived_from_base_t< DerivedDummy >() <<"\n";
  28. std::cout<< is_derived_from_base_t< DerivedGeneric<float> >() <<"\n";
  29. std::cout<< is_derived_from_base_t< float>() <<"\n";
  30. return 0;
  31. }
  32.  
Success #stdin #stdout 0s 3140KB
stdin
Standard input is empty
stdout
1
1
1
0