<p dir="auto">See below for Minimum Working Example or whatever that's called (<strong>edit</strong>: add versioninfo()):</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="julia&gt; x = [1 2; 3 4]
2×2 Array{Int64,2}:
 1  2
 3  4

julia&gt; using LinearAlgebra

julia&gt; x .-= LinearAlgebra.I
┌ Warning: broadcast will default to iterating over its arguments in the future. Wrap arguments of
│ type `x::UniformScaling{Bool}` with `Ref(x)` to ensure they broadcast as &quot;scalar&quot; elements.
│   caller = ip:0x0
└ @ Core :-1
2×2 Array{Int64,2}:
 0  1
 2  3

julia&gt; x .-= Ref(LinearAlgebra.I)
2×2 Array{Int64,2}:
 -1  0
  1  2

julia&gt; versioninfo()
Julia Version 0.7.0-beta2.90
Commit 789ad046b1 (2018-07-24 03:59 UTC)
Platform Info:
  OS: macOS (x86_64-apple-darwin18.0.0)
  CPU: Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.0 (ORCJIT, skylake)"><pre class="notranslate"><code class="notranslate">julia&gt; x = [1 2; 3 4]
2×2 Array{Int64,2}:
 1  2
 3  4

julia&gt; using LinearAlgebra

julia&gt; x .-= LinearAlgebra.I
┌ Warning: broadcast will default to iterating over its arguments in the future. Wrap arguments of
│ type `x::UniformScaling{Bool}` with `Ref(x)` to ensure they broadcast as "scalar" elements.
│   caller = ip:0x0
└ @ Core :-1
2×2 Array{Int64,2}:
 0  1
 2  3

julia&gt; x .-= Ref(LinearAlgebra.I)
2×2 Array{Int64,2}:
 -1  0
  1  2

julia&gt; versioninfo()
Julia Version 0.7.0-beta2.90
Commit 789ad046b1 (2018-07-24 03:59 UTC)
Platform Info:
  OS: macOS (x86_64-apple-darwin18.0.0)
  CPU: Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.0 (ORCJIT, skylake)
</code></pre></div>
<p dir="auto">Broadcasting is not only super convenient, but it also gives new features. For example, broadcasted operations can generate GPU kernels with GPUArrays.jl. So it's really nice to be able to broadcast operations... but this one seems missing. I can't seem to do:</p>
<div class="highlight highlight-source-julia notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="      for j in 1:length(u), i in 1:length(u)
          W[i,j] = I[i,j]-J[i,j]
      end"><pre class="notranslate">      <span class="pl-k">for</span> j <span class="pl-k">in</span> <span class="pl-c1">1</span><span class="pl-k">:</span><span class="pl-c1">length</span>(u), i <span class="pl-k">in</span> <span class="pl-c1">1</span><span class="pl-k">:</span><span class="pl-c1">length</span>(u)
          W[i,j] <span class="pl-k">=</span> I[i,j]<span class="pl-k">-</span>J[i,j]
      <span class="pl-k">end</span></pre></div>
<p dir="auto">If you try to do something similar with broadcast, it's incorrect:</p>
<div class="highlight highlight-source-julia notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="I .- ones(4,4) # == zeros(4,4)"><pre class="notranslate">I <span class="pl-k">.-</span> <span class="pl-c1">ones</span>(<span class="pl-c1">4</span>,<span class="pl-c1">4</span>) <span class="pl-c"><span class="pl-c">#</span> == zeros(4,4)</span></pre></div>
<p dir="auto">It would be nice if broadcast worked on the UniformScaling operator.</p>