title: the type parameter `T` is not constrained by the impl trait, self type, or predicates
body: <p>I'm struggling to wrap my head around usage of traits when these have associated types.</p>
  <p>Here's a very simplified example:</p>
  <pre class="lang-rust prettyprint-override"><code>pub trait Message {}
  
  pub trait SendsMessages {
      type Message: Message;
      
      fn send(msg: Self::Message);
  }
  
  pub struct ImplementsSendsMessages {
  
  }
  
  impl&lt;T&gt; SendsMessages for ImplementsSendsMessages
  where
      T: Message,
  {
      type Message = T;
  
      fn send(id: T) {
          todo!()
      }
  }
  </code></pre>
  <p>Can anyone point me to what I'm doing wrong?</p>