title: Rust lifetime error expected concrete lifetime but found bound lifetime
body: <p>I am having an issue working with lifetime parameters for structs. I am not 100% sure how to describe the problem, but I created a trivial case that shows my compile time error.</p>
  
  <pre><code>struct Ref;
  
  struct Container&lt;'a&gt; {
    r : &amp;'a Ref
  }
  
  struct ContainerB&lt;'a&gt; {
    c : Container&lt;'a&gt;
  }
  
  trait ToC {
    fn to_c&lt;'a&gt;(&amp;self, r : &amp;'a Ref) -&gt; Container&lt;'a&gt;;
  }
  
  impl&lt;'a&gt; ToC for ContainerB&lt;'a&gt; {
    fn to_c(&amp;self, r : &amp;'a Ref) -&gt; Container&lt;'a&gt; {
      self.c
    }
  }
  </code></pre>
  
  <p>The error I am getting with this is </p>
  
  <pre><code>test.rs:16:3: 18:4 error: method `to_c` has an incompatible type for trait: expected concrete lifetime, but found bound lifetime parameter 'a
  test.rs:16   fn to_c(&amp;self, r : &amp;'a Ref) -&gt; Container&lt;'a&gt; {
  test.rs:17     self.c
  test.rs:18   }
  test.rs:16:48: 18:4 note: expected concrete lifetime is the lifetime 'a as defined on the block at 16:47
  test.rs:16   fn to_c(&amp;self, r : &amp;'a Ref) -&gt; Container&lt;'a&gt; {
  test.rs:17     self.c
  test.rs:18   }
  error: aborting due to previous error
  </code></pre>
  
  <p>I have tried many variations and just can't get this thing to compile. I found another post here (<a href="https://stackoverflow.com/questions/24162518/how-to-fix-expected-concrete-lifetime-but-found-bound-lifetime-parameter">How to fix: expected concrete lifetime, but found bound lifetime parameter</a>) but is appears to get around the problem instead of solving it. I can't really see why the problem even originates. The &amp;Ref is being passed along via moves so it should just work right?</p>
  
  <p>Any ideas? Thanks for all the help.</p>