実際にアクセスが起こったときの型の問題と考えると大丈夫なような気もしてきます。
いわゆる strict alias rule は「異なる型の左辺値(glvalue)を介して値(value)にアクセスする」時の規則ですから、質問中にある解釈で問題ないと思います。C++17 [basic.lval]/8
If a program attempts to access the stored value of an object through a glvalue of other than one of the following types the behavior is undefined:
また、異なるオブジェクト型へのポインタ間の変換それ自体はwell-definedです。C++17 [expr.reinterpret.cast]/p7
An object pointer can be explicitly converted to an object pointer of a different type. When a prvalue v
of object pointer type is converted to the object pointer type "pointer to cv T
", the result is static_cast<cv T*>(static_cast<cv void*>(v))
. [...]
本題からはそれますが、変換先のオブジェクト型T
のアライメント要件によっては「未規定(unspecified)のポインタ値」(≠ 未定義(undefined))となる可能性があります。C++17 [static.cast]/13
A prvalue of type "pointer to cv1 void
" can be converted to a prvalue of type "pointer to cv2 T
", where T
is an object type and cv2 is the same cv-qualification as, or greater cv-qualification than, cv1. If the original pointer value represents the address A
of a byte in memory and A
does not satisfy the alignment requirement of T
, then the resulting pointer value is unspecified.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。