== Why is this an issue? Because ``++reinterpret_cast++`` ignores the type system, it is capable of performing dangerous conversions between unrelated types which can lead to undefined behavior. This rule reports an issue for two problematic uses of ``++reinterpret_cast++``: * when it is used to make the compiler believe that an object in memory is from a different type from its real type (for instance, casting a ``++long*++`` to ``++double*++``, because accessing a ``++long++`` as if it was a ``++double++`` is undefined behavior (even if ``++sizeof(long) == sizeof(double)++``), * when it is used to cast between different levels of a complex inheritance hierarchy (a ``++static_cast++`` would apply pointer offsets to take into account multiple inheritance, for instance, but ``++reinterpret_cast++`` does not) === Noncompliant code example [source,cpp] ---- class X {}; class Y : virtual X {}; void test() { long l; auto a = reinterpret_cast(l); // Noncompliant: undefined behavior Y* y; auto x = reinterpret_cast(y); // Noncompliant } ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message reinterpret_cast from "XXX" to "YYY" has undefined behavior endif::env-github,rspecator-view[]