Not really, no. The reason MVector needed to do those pointer calls is that we don’t have a way of mutating tuples. i.e. it’s a difference between
mutable struct V1{N, T}
v::NTuple{N, T}
end
and
mutable struct V2{N, T}
v1::T
v2::T
v3::T
...
vN::T
end
With V1 we can only replace the entire Tuple at a time, not the individual elements of tuple without resorting to pointer tricks. We unfortunately can’t make the second one for arbitrary sizes, but if we could that’s how MVector would be implemented.