fork download
  1. #include <type_traits>
  2.  
  3. class A {};
  4. class B : A {};
  5. class C : A {};
  6. class X{};
  7.  
  8. template<typename T>
  9. class D
  10. {
  11. static_assert(std::is_base_of<A,T>::value, "T must be derived from A");
  12. };
  13.  
  14. int main()
  15. {
  16. D<C> d_valid;
  17. D<X> d_fails; // compilation fails
  18.  
  19. return 0;
  20. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In instantiation of 'class D<X>':
prog.cpp:17:10:   required from here
prog.cpp:11:5: error: static assertion failed: T must be derived from A
     static_assert(std::is_base_of<A,T>::value, "T must be derived from A");
     ^
stdout
Standard output is empty