AbstractArray is too generic for fft. You need to make your struct <:StridedArray{T,N}. In you case, since it only accepts Array{T,N} you can make the struct <:DenseArray{T,N}, which is a subtype of StridedArray.
For a DenseArray you need to write one more method for the struct: Base.unsafe_convert(::Ptr{T}, a::wrap{T,N}) where {T,N} = Base.unsafe_convert(Prt{T}, a.v)
Thank you for the reply, for this example, doing what you described works!
Unfortunately, my use case looks like wrap{T,N} <: Abstractwrap{T,N} <: AbstractArray{T,N}.
Is there a way to make this work cleanly, since it obviously works for the real version (or is was not not supposed to work either? It works because of a call to complexfloat that drops the wrapper type info).