title: What is the purpose of defining empty impl in Rust?
body: <p>For example:</p>
  <pre><code>impl&lt;T: ?Sized&gt; cmp::Eq for $t&lt;T&gt; {}
  </code></pre>
  <p>Why would you even write this code if it has no implementation? It happens in many places, especially related to Eq.</p>
  <pre><code>#[unstable(feature = &quot;structural_match&quot;, issue = &quot;31434&quot;)]
  impl&lt;T: ?Sized&gt; StructuralPartialEq for $t&lt;T&gt; {}
  
  #[unstable(feature = &quot;structural_match&quot;, issue = &quot;31434&quot;)]
  impl&lt;T: ?Sized&gt; StructuralEq for $t&lt;T&gt; {}
  
  #[stable(feature = &quot;rust1&quot;, since = &quot;1.0.0&quot;)]
  impl&lt;T: ?Sized&gt; Copy for $t&lt;T&gt; {}
  
  impl&lt;T: ?Sized&gt; !Freeze for UnsafeCell&lt;T&gt; {}
  unsafe impl&lt;T: ?Sized&gt; Freeze for PhantomData&lt;T&gt; {}
  unsafe impl&lt;T: ?Sized&gt; Freeze for *const T {}
  unsafe impl&lt;T: ?Sized&gt; Freeze for *mut T {}
  unsafe impl&lt;T: ?Sized&gt; Freeze for &amp;T {}
  unsafe impl&lt;T: ?Sized&gt; Freeze for &amp;mut T {}
  </code></pre>