<p dir="auto">The following code works:</p>
<div class="highlight highlight-source-rust notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="    pub fn new(delay: uint, callback: Box&lt;FnMut() -&gt; uint + 'a&gt;, remove_on_drop: bool) -&gt; Timer&lt;'a&gt; {
        ...
    }"><pre class="notranslate">    <span class="pl-k">pub</span> <span class="pl-k">fn</span> <span class="pl-en">new</span><span class="pl-kos">(</span><span class="pl-s1">delay</span><span class="pl-kos">:</span> <span class="pl-smi">uint</span><span class="pl-kos">,</span> <span class="pl-s1">callback</span><span class="pl-kos">:</span> <span class="pl-smi">Box</span><span class="pl-kos">&lt;</span><span class="pl-smi">FnMut</span><span class="pl-kos">(</span><span class="pl-kos">)</span> -&gt; <span class="pl-smi">uint</span> + <span class="pl-c1">'</span><span class="pl-ent">a</span><span class="pl-kos">&gt;</span><span class="pl-kos">,</span> <span class="pl-s1">remove_on_drop</span><span class="pl-kos">:</span> <span class="pl-smi">bool</span><span class="pl-kos">)</span> -&gt; <span class="pl-smi">Timer</span><span class="pl-kos">&lt;</span><span class="pl-c1">'</span><span class="pl-ent">a</span><span class="pl-kos">&gt;</span> <span class="pl-kos">{</span>
        ..<span class="pl-kos">.</span><span class="pl-c1"></span>
    <span class="pl-kos">}</span></pre></div>
<p dir="auto">But this doesn't:</p>
<div class="highlight highlight-source-rust notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="    pub fn new(delay: uint, callback: Box&lt;(FnMut() -&gt; uint) + 'a&gt;, remove_on_drop: bool) -&gt; Timer&lt;'a&gt; {
        ...
    }"><pre class="notranslate">    <span class="pl-k">pub</span> <span class="pl-k">fn</span> <span class="pl-en">new</span><span class="pl-kos">(</span><span class="pl-s1">delay</span><span class="pl-kos">:</span> <span class="pl-smi">uint</span><span class="pl-kos">,</span> <span class="pl-s1">callback</span><span class="pl-kos">:</span> <span class="pl-smi">Box</span><span class="pl-kos">&lt;</span><span class="pl-kos">(</span><span class="pl-smi">FnMut</span><span class="pl-kos">(</span><span class="pl-kos">)</span> -&gt; <span class="pl-smi">uint</span><span class="pl-kos">)</span> + <span class="pl-c1">'</span><span class="pl-ent">a</span><span class="pl-kos">&gt;</span><span class="pl-kos">,</span> <span class="pl-s1">remove_on_drop</span><span class="pl-kos">:</span> <span class="pl-smi">bool</span><span class="pl-kos">)</span> -&gt; <span class="pl-smi">Timer</span><span class="pl-kos">&lt;</span><span class="pl-c1">'</span><span class="pl-ent">a</span><span class="pl-kos">&gt;</span> <span class="pl-kos">{</span>
        ..<span class="pl-kos">.</span><span class="pl-c1"></span>
    <span class="pl-kos">}</span></pre></div>
<p dir="auto"><code class="notranslate">rustc</code> complains that</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="src/sdl2/timer.rs:33:43: 33:60 error: expected a path on the left-hand side of `+`, not `(FnMut() -&gt; uint)` [E0178]
src/sdl2/timer.rs:33     pub fn new(delay: uint, callback: Box&lt;(FnMut() -&gt; uint) + 'a&gt;, remove_on_drop: bool) -&gt; Timer&lt;'a&gt; {
                                                               ^~~~~~~~~~~~~~~~~
src/sdl2/timer.rs:33:43: 33:60 note: perhaps you forgot parentheses? (per RFC 438)
src/sdl2/timer.rs:33     pub fn new(delay: uint, callback: Box&lt;(FnMut() -&gt; uint) + 'a&gt;, remove_on_drop: bool) -&gt; Timer&lt;'a&gt; {
                                                               ^~~~~~~~~~~~~~~~~"><pre class="notranslate"><code class="notranslate">src/sdl2/timer.rs:33:43: 33:60 error: expected a path on the left-hand side of `+`, not `(FnMut() -&gt; uint)` [E0178]
src/sdl2/timer.rs:33     pub fn new(delay: uint, callback: Box&lt;(FnMut() -&gt; uint) + 'a&gt;, remove_on_drop: bool) -&gt; Timer&lt;'a&gt; {
                                                               ^~~~~~~~~~~~~~~~~
src/sdl2/timer.rs:33:43: 33:60 note: perhaps you forgot parentheses? (per RFC 438)
src/sdl2/timer.rs:33     pub fn new(delay: uint, callback: Box&lt;(FnMut() -&gt; uint) + 'a&gt;, remove_on_drop: bool) -&gt; Timer&lt;'a&gt; {
                                                               ^~~~~~~~~~~~~~~~~
</code></pre></div>
<p dir="auto">If I understand correctly the syntax is <code class="notranslate">trait + lifetime</code>, so I'd expect those parentheses to be fine (and imho they make the code more clear).  The note about forgetting parentheses is also puzzling.</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="// Accepted while it should not.
type A = Box&lt;(Trait1) + Trait2 + 'lifetime&gt;;

// Correct syntax.
type A = Box&lt;Trait1 + Trait2 + 'lifetime&gt;;"><pre class="notranslate"><code class="notranslate">// Accepted while it should not.
type A = Box&lt;(Trait1) + Trait2 + 'lifetime&gt;;

// Correct syntax.
type A = Box&lt;Trait1 + Trait2 + 'lifetime&gt;;
</code></pre></div>
<p dir="auto">The syntax for object types is the same as for other bounds - <code class="notranslate">Bound + Bound + Bound + ....</code> and parentheses are not a part of bound syntax.</p>
<p dir="auto">This is a stable-stable regression, introduced in Rust 1.6 by <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="117203948" data-permission-text="Title is private" data-url="https://github.com/rust-lang/rust/issues/29870" data-hovercard-type="pull_request" data-hovercard-url="/rust-lang/rust/pull/29870/hovercard" href="https://github.com/rust-lang/rust/pull/29870">#29870</a>.<br>
cc <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="201734914" data-permission-text="Title is private" data-url="https://github.com/rust-lang/rust/issues/39169" data-hovercard-type="issue" data-hovercard-url="/rust-lang/rust/issues/39169/hovercard" href="https://github.com/rust-lang/rust/issues/39169">#39169</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="201822567" data-permission-text="Title is private" data-url="https://github.com/rust-lang/rust/issues/39179" data-hovercard-type="pull_request" data-hovercard-url="/rust-lang/rust/pull/39179/hovercard" href="https://github.com/rust-lang/rust/pull/39179">#39179</a></p>
<h4 dir="auto">Current status</h4>
<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="209623403" data-permission-text="Title is private" data-url="https://github.com/rust-lang/rust/issues/40043" data-hovercard-type="pull_request" data-hovercard-url="/rust-lang/rust/pull/40043/hovercard" href="https://github.com/rust-lang/rust/pull/40043">#40043</a> - <code class="notranslate">(Bound) + Bound + ....</code> is still parsed <del>, but with a warning. This is a "hardcoded" warning and not a lint, lints cannot be reported from <code class="notranslate">libsyntax</code></del>.</li>
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox"> PR ? turns this syntax into a hard error</li>
</ul>