== Why is this an issue? Casting from a virtual base to a derived class, using any means other than `dynamic_cast` has undefined behavior. The behavior for `dynamic_cast` is defined. Note: As of {cpp}17, the program is considered ill-formed, and an error is reported. Most compilers emit an error for previous versions of {cpp} as well. === Noncompliant code example [source,cpp,diff-id=1,diff-type=noncompliant] ---- class B { ... }; class D: public virtual B { ... }; D d; B *pB = &d; D *pD1 = ( D * ) pB; // Noncompliant - undefined behavior D *pD2 = static_cast(pB); // Noncompliant - undefined behavior ---- === Compliant solution [source,cpp,diff-id=1,diff-type=compliant] ---- class B { ... }; class D: public virtual B { ... }; D d; B *pB = &d; D *pD1 = dynamic_cast(pB); // Compliant, but pD2 may be NULL D & D2 = dynamic_cast(*pB); // Compliant, but may throw an exception ---- == Resources * MISRA {cpp}:2008, 5-2-2 - A pointer to a virtual base class shall only be cast to a pointer to a derived class by means of dynamic_cast. ifdef::env-github,rspecator-view[] ''' == Comments And Links (visible only on this page) === is duplicated by: S869 endif::env-github,rspecator-view[]