On Friday, 5 February 2016 at 00:12:07 UTC, Ola Fosheim Grøstad
wrote:
It makes perfect sense for one compilation unit to type a
parameter pointer to float and another unit to type the same
parameter as a simd-array of floats. The underlying code could
be machine language. And in machine language there are no types
(on current CPUs), only bit patterns. So you can have multiple
reasonable interpretations of the same machine language entry.
A type is a constraint, but it isn't a property of the actual
bits, it is a language specific interpretation.
Aliasing types like that can be useful sometimes, but only within
certain limits. In particular, the size (with alignment padding)
of the types in question must match, otherwise you will corrupt
the stack.
It is often useful to cast from one pointer type to another, but
that is why C has void* and explicit casts - so that one may
document that the reinterpretation is intentional.