diff --git a/base/generator.jl b/base/generator.jl index b0f7e32d0b22f..73d0e8a2e3ee2 100644 --- a/base/generator.jl +++ b/base/generator.jl @@ -126,3 +126,4 @@ IteratorEltype(::Type) = HasEltype() # HasEltype is the default IteratorEltype(::Type{Generator{I,T}}) where {I,T} = EltypeUnknown() IteratorEltype(::Type{Any}) = EltypeUnknown() +IteratorEltype(::Type{Union{}}) = EltypeUnknown() diff --git a/base/iterators.jl b/base/iterators.jl index 1564ffa1be9a1..ac3c3ad88d9a3 100644 --- a/base/iterators.jl +++ b/base/iterators.jl @@ -880,6 +880,7 @@ _flatteneltype(I, et) = EltypeUnknown() flatten_iteratorsize(::Union{HasShape, HasLength}, ::Type{<:NTuple{N,Any}}) where {N} = HasLength() flatten_iteratorsize(::Union{HasShape, HasLength}, ::Type{<:Tuple}) = SizeUnknown() flatten_iteratorsize(::Union{HasShape, HasLength}, ::Type{<:Number}) = HasLength() +flatten_iteratorsize(::Union{HasShape, HasLength}, ::Type{Union{}}) = SizeUnknown() flatten_iteratorsize(a, b) = SizeUnknown() _flatten_iteratorsize(sz, ::EltypeUnknown, I) = SizeUnknown() diff --git a/test/iterators.jl b/test/iterators.jl index 5fca4f11b91ad..6e5f88a72cd0d 100644 --- a/test/iterators.jl +++ b/test/iterators.jl @@ -365,6 +365,7 @@ end @test length(flatten(zip(1:3, 4:6))) == 6 @test length(flatten(1:6)) == 6 @test collect(flatten(Any[])) == Any[] +@test collect(flatten(())) == Union{}[] @test_throws ArgumentError length(flatten(NTuple[(1,), ()])) # #16680 @test_throws ArgumentError length(flatten([[1], [1]]))