diff --git a/src/EltypeExtensions.jl b/src/EltypeExtensions.jl index 97dd220..431f5d1 100644 --- a/src/EltypeExtensions.jl +++ b/src/EltypeExtensions.jl @@ -73,7 +73,11 @@ for TYP in (Adjoint, Diagonal, Hermitian, Symmetric, SymTridiagonal, Transpose) @eval _to_eltype(::Type{T}, ::Type{$TYP}) where T = $TYP{T} @eval _to_eltype(::Type{T}, ::Type{$TYP{S}}) where {T,S} = $TYP{T} @eval _to_eltype(::Type{T}, ::Type{$TYP{S,M}}) where {T,S,M} = $TYP{T,_to_eltype(T,M)} - @eval convert_eltype(::Type{T}, A::S) where {T,S<:$TYP} = convert(_to_eltype(T, S), A) + if TYP == SymTridiagonal + @eval convert_eltype(::Type{T}, A::SymTridiagonal) where {T} = SymTridiagonal(convert_eltype(T, A.dv), convert_eltype(T, A.ev)) + else + @eval convert_eltype(::Type{T}, A::$TYP) where {T} = $TYP(convert_eltype(T, parent(A))) + end end @static if VERSION >= v"1.6" diff --git a/test/runtests.jl b/test/runtests.jl index e9125a0..b5a412e 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -62,6 +62,10 @@ end @testset "#10" begin @test convert_eltype(Int32, 1:5) === Int32(1):Int32(5) end + + @testset "#31" begin + @test convert_eltype(Float64, Diagonal(1:5)) ≡ Diagonal(1.0:5.0) + end end @testset "Misc" begin