Skip to content

Commit 05037f5

Browse files
authored
Merge pull request #23433 from JuliaLang/jb/boolmul
restrict special `*` methods for `Bool`, which tend to cause ambiguities
2 parents ff706aa + 2301d70 commit 05037f5

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

base/bool.jl

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,18 +95,17 @@ isone(x::Bool) = x
9595
^(x::Bool, y::Bool) = x | !y
9696
^(x::Integer, y::Bool) = ifelse(y, x, one(x))
9797

98+
# preserve -0.0 in `false + -0.0`
9899
function +(x::Bool, y::T)::promote_type(Bool,T) where T<:AbstractFloat
99100
return ifelse(x, oneunit(y) + y, y)
100101
end
101102
+(y::AbstractFloat, x::Bool) = x + y
102103

103-
function *(x::Bool, y::T)::promote_type(Bool,T) where T<:Number
104+
# make `false` a "strong zero": false*NaN == 0.0
105+
function *(x::Bool, y::T)::promote_type(Bool,T) where T<:AbstractFloat
104106
return ifelse(x, y, copysign(zero(y), y))
105107
end
106-
function *(x::Bool, y::T)::promote_type(Bool,T) where T<:Unsigned
107-
return ifelse(x, y, zero(y))
108-
end
109-
*(y::Number, x::Bool) = x * y
108+
*(y::AbstractFloat, x::Bool) = x * y
110109

111110
div(x::Bool, y::Bool) = y ? x : throw(DivideError())
112111
fld(x::Bool, y::Bool) = div(x,y)

0 commit comments

Comments
 (0)