Decided to report it[1] myself in order not to (further) spam the mailing list.
[1] https://github.com/JuliaLang/julia/issues/11136 On Tue, May 5, 2015 at 12:13 PM, Yichao Yu <[email protected]> wrote: > On Tue, May 5, 2015 at 12:11 PM, Yichao Yu <[email protected]> wrote: >> Seems to be related to `typeintersect` and the error also disappears >> when the order of defining those functions are reversed >> >> Minimum working example: >> >> ```julia >> type A >> end >> >> type B >> end > > Note that change A and/or B to abstract type doesn't change the > output. I use concrete type here just to make sure there's absolutely > no chance that the two can be a subtype of each other. > >> >> f{T}(::Type{T}, ::T) = nothing >> f{T<:B}(::Type{A}, ::T) = nothing >> >> g{T<:B}(::Type{A}, ::T) = nothing >> g{T}(::Type{T}, ::T) = nothing >> >> t1 = f.env.defs.sig >> t2 = f.env.defs.next.sig >> >> println("Signatures: $t1, $t2") >> println("Intersect: $(typeintersect(t1, t2))") >> println("Intersect: $(typeintersect(t2, t1))") >> ``` >> >> Output (on my branch that fixes the output formatting....) >> >> ``` >> Warning: New definition >> f(Type{A}, T<:B) at /home/yuyichao/tmp/julia/type_intersect.jl:10 >> is ambiguous with: >> f(Type{T}, T) at /home/yuyichao/tmp/julia/type_intersect.jl:9. >> To fix, define >> f(Type{A}, A) >> before the new definition. >> Signatures: Tuple{Type{T},T}, Tuple{Type{A},T<:B} >> Intersect: Union() >> Intersect: Tuple{Type{A},A} >> ``` >> >> Should probably be reported as bug? >> >> >> On Tue, May 5, 2015 at 7:09 AM, Avik Sengupta <[email protected]> >> wrote: >>> Thanks Tovio >>> >>>> unless JString <: String (but I guess it isn't?). >>> >>> No, indeed, JString is not a subtype of a Julia string. It is simply a >>> wrapper around a pointer. It has no string-like behaviour in Julia, other >>> than being able to be converted back and forth from a Julia string. >>> >>>> it seems to me that your method can never be an identity conversion >>> >>> I could write a method definition such as >>> >>> convert(::Type{JString}, str::JString) = str >>> >>> I suppose that should be safe, but I don't understand why that should be >>> necessary, or what benefit it will have. >>> >>> On Tuesday, 5 May 2015 11:38:38 UTC+1, Toivo Henningsson wrote: >>>> >>>> This looks like a julia bug, unless JString <: String (but I guess it >>>> isn't?). >>>> >>>> The method from Base is the generic identity conversion, but it seems to >>>> me that your method can never be an identity conversion?
