<p dir="auto">A common pattern is converting keyword arguments into a <code class="notranslate">Dict</code> for easier manipulation. On master this currently throws an error:</p>
<div class="highlight highlight-source-julia notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="julia&gt; f(;kw...) = Dict(kw...)
f (generic function with 1 method)

julia&gt; f(a=1)
ERROR: ArgumentError: Dict(kv): kv needs to be an iterator of tuples or pairs
Stacktrace:
 [1] Dict(::Int64) at ./dict.jl:147
 [2] #f#1 at ./REPL[1]:1 [inlined]
 [3] (::getfield(, Symbol(&quot;#kw##f&quot;)))(::NamedTuple{(:a,),Tuple{Int64}}, ::typeof(f)) at ./&lt;missing&gt;:0
 [4] top-level scope"><pre class="notranslate">julia<span class="pl-k">&gt;</span> <span class="pl-en">f</span>(;kw<span class="pl-k">...</span>) <span class="pl-k">=</span> <span class="pl-c1">Dict</span>(kw<span class="pl-k">...</span>)
f (generic <span class="pl-k">function</span> with <span class="pl-c1">1</span> method)

julia<span class="pl-k">&gt;</span> <span class="pl-c1">f</span>(a<span class="pl-k">=</span><span class="pl-c1">1</span>)
ERROR<span class="pl-k">:</span> ArgumentError<span class="pl-k">:</span> <span class="pl-c1">Dict</span>(kv)<span class="pl-k">:</span> kv needs to be an iterator of tuples or pairs
Stacktrace<span class="pl-k">:</span>
 [<span class="pl-c1">1</span>] <span class="pl-c1">Dict</span>(<span class="pl-k">::</span><span class="pl-c1">Int64</span>) at <span class="pl-k">./</span>dict<span class="pl-k">.</span>jl<span class="pl-k">:</span><span class="pl-c1">147</span>
 [<span class="pl-c1">2</span>] <span class="pl-c"><span class="pl-c">#</span>f#1 at ./REPL[1]:1 [inlined]</span>
 [<span class="pl-c1">3</span>] (<span class="pl-k">::</span><span class="pl-c1">getfield</span>(, <span class="pl-c1">Symbol</span>(<span class="pl-s"><span class="pl-pds">"</span>#kw##f<span class="pl-pds">"</span></span>)))(<span class="pl-k">::</span><span class="pl-c1">NamedTuple{(:a,),Tuple{Int64}}</span>, <span class="pl-k">::</span><span class="pl-c1">typeof</span>(f)) at <span class="pl-k">./</span><span class="pl-k">&lt;</span><span class="pl-c1">missing</span><span class="pl-k">&gt;:</span><span class="pl-c1">0</span>
 [<span class="pl-c1">4</span>] top<span class="pl-k">-</span>level scope</pre></div>
<p dir="auto">I think a <code class="notranslate">depwarn</code> would be better. Especially for code that needs to work on <code class="notranslate">v0.6</code> and master.</p>
<p dir="auto">This seems to be a consequence of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="276847030" data-permission-text="Title is private" data-url="https://github.com/JuliaLang/julia/issues/24795" data-hovercard-type="pull_request" data-hovercard-url="/JuliaLang/julia/pull/24795/hovercard" href="https://github.com/JuliaLang/julia/pull/24795">#24795</a></p>
<p dir="auto">In previous Julia versions, we could iterate through vararg keywords as key-value tuples:</p>
<div class="highlight highlight-source-julia notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="julia&gt; function foo(;kw...)
         for (k, v) in kw
           @show (k, v)
         end
       end
foo (generic function with 1 method)

julia&gt; foo(x=1, y=2)
(k, v) = (:x, 1)
(k, v) = (:y, 2)"><pre class="notranslate">julia<span class="pl-k">&gt;</span> <span class="pl-k">function</span> <span class="pl-en">foo</span>(;kw<span class="pl-k">...</span>)
         <span class="pl-k">for</span> (k, v) <span class="pl-k">in</span> kw
           <span class="pl-c1">@show</span> (k, v)
         <span class="pl-k">end</span>
       <span class="pl-k">end</span>
foo (generic <span class="pl-k">function</span> with <span class="pl-c1">1</span> method)

julia<span class="pl-k">&gt;</span> <span class="pl-c1">foo</span>(x<span class="pl-k">=</span><span class="pl-c1">1</span>, y<span class="pl-k">=</span><span class="pl-c1">2</span>)
(k, v) <span class="pl-k">=</span> (<span class="pl-c1">:x</span>, <span class="pl-c1">1</span>)
(k, v) <span class="pl-k">=</span> (<span class="pl-c1">:y</span>, <span class="pl-c1">2</span>)</pre></div>
<p dir="auto">but after <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="276847030" data-permission-text="Title is private" data-url="https://github.com/JuliaLang/julia/issues/24795" data-hovercard-type="pull_request" data-hovercard-url="/JuliaLang/julia/pull/24795/hovercard" href="https://github.com/JuliaLang/julia/pull/24795">#24795</a>, iterating through vararg keywords only gives the values:</p>
<div class="highlight highlight-source-julia notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="julia&gt; function foo(;kw...)
         for (k, v) in kw
           @show (k, v)
         end
       end
foo (generic function with 1 method)

julia&gt; foo(x=1, y=2)
ERROR: BoundsError: attempt to access 1
  at index [2]
Stacktrace:
 [1] indexed_next at ./tuple.jl:60 [inlined]
 [2] #foo#2(::NamedTuple{(:x, :y),Tuple{Int64,Int64}}, ::Function) at ./REPL[3]:2
 [3] (::getfield(, Symbol(&quot;#kw##foo&quot;)))(::NamedTuple{(:x, :y),Tuple{Int64,Int64}}, ::typeof(foo)) at ./&lt;missing&gt;:0
 [4] top-level scope"><pre class="notranslate">julia<span class="pl-k">&gt;</span> <span class="pl-k">function</span> <span class="pl-en">foo</span>(;kw<span class="pl-k">...</span>)
         <span class="pl-k">for</span> (k, v) <span class="pl-k">in</span> kw
           <span class="pl-c1">@show</span> (k, v)
         <span class="pl-k">end</span>
       <span class="pl-k">end</span>
foo (generic <span class="pl-k">function</span> with <span class="pl-c1">1</span> method)

julia<span class="pl-k">&gt;</span> <span class="pl-c1">foo</span>(x<span class="pl-k">=</span><span class="pl-c1">1</span>, y<span class="pl-k">=</span><span class="pl-c1">2</span>)
ERROR<span class="pl-k">:</span> BoundsError<span class="pl-k">:</span> attempt to access <span class="pl-c1">1</span>
  at index [<span class="pl-c1">2</span>]
Stacktrace<span class="pl-k">:</span>
 [<span class="pl-c1">1</span>] indexed_next at <span class="pl-k">./</span>tuple<span class="pl-k">.</span>jl<span class="pl-k">:</span><span class="pl-c1">60</span> [inlined]
 [<span class="pl-c1">2</span>] <span class="pl-c"><span class="pl-c">#</span>foo#2(::NamedTuple{(:x, :y),Tuple{Int64,Int64}}, ::Function) at ./REPL[3]:2</span>
 [<span class="pl-c1">3</span>] (<span class="pl-k">::</span><span class="pl-c1">getfield</span>(, <span class="pl-c1">Symbol</span>(<span class="pl-s"><span class="pl-pds">"</span>#kw##foo<span class="pl-pds">"</span></span>)))(<span class="pl-k">::</span><span class="pl-c1">NamedTuple{(:x, :y),Tuple{Int64,Int64}}</span>, <span class="pl-k">::</span><span class="pl-c1">typeof</span>(foo)) at <span class="pl-k">./</span><span class="pl-k">&lt;</span><span class="pl-c1">missing</span><span class="pl-k">&gt;:</span><span class="pl-c1">0</span>
 [<span class="pl-c1">4</span>] top<span class="pl-k">-</span>level scope</pre></div>
<p dir="auto">If this is an intended change, then it should probably at least be mentioned in NEWS.md. I realize that the changelog mentions that "name-value pairs can be iterated using pairs(kw)" but I think it's important to clarify that this is a breaking change.</p>