Expected concrete lifetime, found bound lifetime parameter when storing a fn in a struct
<p>I'm trying to store a function in a struct:</p>

<pre><code>trait T&lt;'a&gt; {}

struct A {}

struct B&lt;'a&gt; {
    a: &amp;'a A
}

impl&lt;'a&gt; T&lt;'a&gt; for B&lt;'a&gt; {}

fn f1&lt;'a, E: T&lt;'a&gt;&gt;(a: &amp;'a A) {}

struct D {
    f: fn(&amp;A)
}

fn main() {
    let d = D { f: f1::&lt;B&gt; };
}
</code></pre>

<p>The compiler complains:</p>

<pre class="lang-none prettyprint-override"><code>error[E0308]: mismatched types
  --&gt; src/main.rs:18:20
   |
18 |     let d = D { f: f1::&lt;B&gt; };
   |                    ^^^^^^^ expected concrete lifetime, found bound lifetime parameter 
   |
   = note: expected type `fn(&amp;A)`
   = note:    found type `fn(&amp;A) {f1::&lt;'_, B&lt;'_&gt;&gt;}`
</code></pre>