@@ -441,7 +441,9 @@ Base.Broadcast.DefaultArrayStyle{1}()
441441function result_style end
442442
443443result_style (s:: BroadcastStyle ) = s
444- result_style (s1:: S , s2:: S ) where S<: BroadcastStyle = S ()
444+ function result_style (s1:: S , s2:: S ) where S<: BroadcastStyle
445+ s1 ≡ s2 ? s1 : error (" inconsistent broadcast styles, custom rule needed" )
446+ end
445447# Test both orders so users typically only have to declare one order
446448result_style (s1, s2) = result_join (s1, s2, BroadcastStyle (s1, s2), BroadcastStyle (s2, s1))
447449
@@ -457,7 +459,8 @@ result_join(::Any, ::Any, s::BroadcastStyle, ::Unknown) = s
457459result_join (:: AbstractArrayStyle , :: AbstractArrayStyle , :: Unknown , :: Unknown ) =
458460 ArrayConflict ()
459461# Fallbacks in case users define `rule` for both argument-orders (not recommended)
460- result_join (:: Any , :: Any , :: S , :: S ) where S<: BroadcastStyle = S ()
462+ result_join (:: Any , :: Any , s1:: S , s2:: S ) where S<: BroadcastStyle = result_style (s1, s2)
463+
461464@noinline function result_join (:: S , :: T , :: U , :: V ) where {S,T,U,V}
462465 error ("""
463466conflicting broadcast rules defined
0 commit comments