fork download
  1. struct ITarget {};
  2.  
  3. struct ISource {
  4. virtual ~ISource() {}
  5. };
  6.  
  7. struct IBase {};
  8.  
  9. struct IInput : virtual public IBase, virtual public ITarget {};
  10.  
  11. struct IOutput : virtual public IBase, virtual public ISource {};
  12.  
  13. struct SBase : virtual public IBase, virtual public ISource, virtual public ITarget {};
  14.  
  15. struct SInput : public IInput, public SBase {};
  16.  
  17. struct SOutput : public IOutput, public SBase {};
  18.  
  19. #include <iostream>
  20.  
  21. int main()
  22. {
  23. ISource* s = new SInput;
  24. SInput* i = dynamic_cast<SInput*>(s);
  25. if (i) std::cout << "YES\n";
  26. }
  27.  
Success #stdin #stdout 0.01s 2856KB
stdin
Standard input is empty
stdout
YES