Constness of fields and coercion

What you are asking, coercing structs if their members coerce, is fundamentally changing the semantics of types. Such an implicit conversion would undermine type safety in many cases.

Note that the compiler treats structs created by the same function are fundamentally different types. So what applies to structs created by the same function also needs to apply to separate structs.

So for example it would allow coercing a triangular matrix into a dense matrix:

const Triangular = struct {linear: []T};
const Dense = struct {linear: []T}; // Same parameter names → indistinguishable to the compiler

const triangular: Triangular = ...
const dense: Dense = triangular; // This would be legal with your proposed semantics.

I think adding a toConst function is a small price to pay, compared to the side effects of implicit conversion.