fork download
  1. #include <iostream>
  2.  
  3.  
  4. class A {
  5. public:
  6. virtual void f()=0;
  7. };
  8.  
  9. class B : public A {
  10. public:
  11.  
  12. };
  13.  
  14. class C : public A {
  15. public:
  16. };
  17.  
  18. class E {
  19. public:
  20.  
  21. };
  22.  
  23. template<class Parent>
  24. class D : public Parent {
  25. static_assert(std::is_base_of<A,Parent>::value, "Not derived from A");
  26. public:
  27. void f() { std::cout << "Works"; }
  28. };
  29.  
  30. class X : public D<B> {
  31. public:
  32.  
  33. };
  34.  
  35. class Y : public D<C> {
  36. public:
  37. };
  38.  
  39. /*class Z : public D<E> {
  40. This one gives a static_assert if its not E
  41. };*/
  42.  
  43. int main() {
  44. A * base = new X;
  45. base->f();
  46. return 0;
  47. }
Success #stdin #stdout 0s 3428KB
stdin
Standard input is empty
stdout
Works