fork download
  1. #include <cassert>
  2.  
  3. struct A {
  4. virtual ~A() noexcept = default;
  5. };
  6.  
  7. struct B : virtual public A {
  8. virtual ~B() noexcept = default;
  9. };
  10.  
  11. struct C1 : public B {
  12. virtual ~C1() noexcept = default;
  13. };
  14.  
  15. struct C2 : public B {
  16. virtual ~C2() noexcept = default;
  17. };
  18.  
  19. struct D : public C1, public C2 {
  20. virtual ~D() noexcept = default;
  21. };
  22.  
  23. int main() {
  24. A *ptr = new D;
  25. assert(dynamic_cast<D*>(ptr) != nullptr); // ok
  26. assert(dynamic_cast<B*>(ptr) == nullptr); // ambigious sub-class B
  27. }
  28.  
Success #stdin #stdout 0s 3024KB
stdin
Standard input is empty
stdout
Standard output is empty