<p dir="auto">Trying to define an empty trait:</p>
<div class="highlight highlight-source-rust notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="trait Foo {}"><pre class="notranslate"><span class="pl-k">trait</span> <span class="pl-smi">Foo</span> <span class="pl-kos">{</span><span class="pl-kos">}</span></pre></div>
<p dir="auto">produces a confusing message about <code class="notranslate">Self</code>:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="unnamed.rs:1:1: 1:13 error: parameter `Self` is never used
unnamed.rs:1 trait Foo {}
             ^~~~~~~~~~~~
unnamed.rs:1:13: 1:13 help: consider removing `Self` or using a marker such as `core::marker::PhantomFn`
error: aborting due to previous error"><pre class="notranslate"><code class="notranslate">unnamed.rs:1:1: 1:13 error: parameter `Self` is never used
unnamed.rs:1 trait Foo {}
             ^~~~~~~~~~~~
unnamed.rs:1:13: 1:13 help: consider removing `Self` or using a marker such as `core::marker::PhantomFn`
error: aborting due to previous error
</code></pre></div>
<p dir="auto">It appears that the compiler is internally treating the trait as though it had a type parameter defined called <code class="notranslate">Self</code>, and then complaining about the parameter being unused. But from the user's perspective there is no such parameter, and the suggestion to remove it is nonsense. The error message should be adjusted to recognize when it's complaining about <code class="notranslate">Self</code> and to explain itself better.</p>
<p dir="auto"><a href="http://is.gd/GmxfTA" rel="nofollow">Given the input</a></p>
<div class="highlight highlight-source-rust notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="trait T {}"><pre class="notranslate"><span class="pl-k">trait</span> <span class="pl-smi">T</span> <span class="pl-kos">{</span><span class="pl-kos">}</span></pre></div>
<p dir="auto">rustc will complain:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="&lt;anon&gt;:2:1: 2:11 error: parameter `Self` is never used
&lt;anon&gt;:2 trait T {}
         ^~~~~~~~~~
&lt;anon&gt;:2:1: 2:11 help: consider removing `Self` or using a marker such as `core::marker::PhantomFn`
&lt;anon&gt;:2 trait T {}
         ^~~~~~~~~~"><pre class="notranslate"><code class="notranslate">&lt;anon&gt;:2:1: 2:11 error: parameter `Self` is never used
&lt;anon&gt;:2 trait T {}
         ^~~~~~~~~~
&lt;anon&gt;:2:1: 2:11 help: consider removing `Self` or using a marker such as `core::marker::PhantomFn`
&lt;anon&gt;:2 trait T {}
         ^~~~~~~~~~
</code></pre></div>
<p dir="auto">This may just be a diagnostics issue, but I'll let someone more familiar with Rust make that judgement.</p>