As far as I understand, StructArrays will convert a vector of complex numbers into two vectors, one for the real part other for the imaginary part. To vectorize, I think you must (unless some macro within LoopVectorization is smart enough to do that automatically), operate on each of these vectors independently. For example:
julia> using LoopVectorization
julia> x = StructArray([rand(ComplexF64) for _ in 1:100]);
julia> @turbo for i in eachindex(x)
x.re[i] += rand()
x.im[i] += rand()
end
(I don’t really understand the use of StructArray if the input is a scalar. I think that only defines the type of element that the arrays will contain, and you are not really doing anything useful there in your example by adding or subtracting values from StructArray(1.0 + 1.0im)).