No, you're not.<p>You're allowed to access any type via a char buffer. But the converse is not true (quoting <a href="https://eel.is/c++draft/expr#basic.lval-11" rel="nofollow">https://eel.is/c++draft/expr#basic.lval-11</a>):<p>> An object of dynamic type Tobj is type-accessible through a glvalue of type Tref if Tref is similar ([conv.qual]) to: Tobj, a type that is the signed or unsigned type corresponding to Tobj, or a char, unsigned char, or std :: byte type. If a program attempts to access ([defns.access]) the stored value of an object through a glvalue through which it is not type-accessible, the behavior is undefined.<p>The dynamic type of a char buffer is, well, a char buffer, and can only be accessed via things that are the same type as a char buffer up to signedness and cv-qualification. The actual strict aliasing rules are not commutative!