<p dir="auto">Minimal example:</p>
<div class="highlight highlight-source-rust notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="trait Foo {
    type T;
}

#[derive(Copy)]
struct PairFoo&lt;F: Foo&gt;(pub F::T, pub F::T);

fn main() {}"><pre class="notranslate"><span class="pl-k">trait</span> <span class="pl-smi">Foo</span> <span class="pl-kos">{</span>
    <span class="pl-k">type</span> <span class="pl-smi">T</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span>

<span class="pl-c1">#<span class="pl-kos">[</span>derive<span class="pl-kos">(</span><span class="pl-v">Copy</span><span class="pl-kos">)</span><span class="pl-kos">]</span></span>
<span class="pl-k">struct</span> <span class="pl-smi">PairFoo</span><span class="pl-kos">&lt;</span><span class="pl-smi">F</span><span class="pl-kos">:</span> <span class="pl-smi">Foo</span><span class="pl-kos">&gt;</span><span class="pl-kos">(</span><span class="pl-k">pub</span> <span class="pl-smi">F</span><span class="pl-kos">::</span><span class="pl-smi">T</span><span class="pl-kos">,</span> <span class="pl-k">pub</span> <span class="pl-smi">F</span><span class="pl-kos">::</span><span class="pl-smi">T</span><span class="pl-kos">)</span><span class="pl-kos">;</span>

<span class="pl-k">fn</span> <span class="pl-en">main</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span><span class="pl-kos">}</span></pre></div>
<p dir="auto"><code class="notranslate">rustc -Z unstable-options --pretty=expanded</code> yields:</p>
<div class="highlight highlight-source-rust notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="#![feature(no_std)]
#![no_std]
#[prelude_import]
use std::prelude::v1::*;
#[macro_use]
extern crate &quot;std&quot; as std;
trait Foo {
    type
    T;
}

struct PairFoo&lt;F: Foo&gt;(pub F::T, pub F::T);
#[automatically_derived]
impl &lt;F: ::std::marker::Copy + Foo&gt; ::std::marker::Copy for PairFoo&lt;F&gt; { }

fn main() { }"><pre class="notranslate"><span class="pl-c1">#!<span class="pl-kos">[</span>feature<span class="pl-kos">(</span>no_std<span class="pl-kos">)</span><span class="pl-kos">]</span></span>
<span class="pl-c1">#!<span class="pl-kos">[</span>no_std<span class="pl-kos">]</span></span>
<span class="pl-c1">#<span class="pl-kos">[</span>prelude_import<span class="pl-kos">]</span></span>
<span class="pl-k">use</span> std<span class="pl-kos">::</span>prelude<span class="pl-kos">::</span>v1<span class="pl-kos">::</span><span class="pl-c1">*</span><span class="pl-kos">;</span>
<span class="pl-c1">#<span class="pl-kos">[</span>macro_use<span class="pl-kos">]</span></span>
<span class="pl-k">extern</span> <span class="pl-k">crate</span> <span class="pl-s">"std"</span> as std<span class="pl-kos">;</span>
<span class="pl-k">trait</span> <span class="pl-smi">Foo</span> <span class="pl-kos">{</span>
    <span class="pl-k">type</span>
    <span class="pl-smi">T</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span>

<span class="pl-k">struct</span> <span class="pl-smi">PairFoo</span><span class="pl-kos">&lt;</span><span class="pl-smi">F</span><span class="pl-kos">:</span> <span class="pl-smi">Foo</span><span class="pl-kos">&gt;</span><span class="pl-kos">(</span><span class="pl-k">pub</span> <span class="pl-smi">F</span><span class="pl-kos">::</span><span class="pl-smi">T</span><span class="pl-kos">,</span> <span class="pl-k">pub</span> <span class="pl-smi">F</span><span class="pl-kos">::</span><span class="pl-smi">T</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-c1">#<span class="pl-kos">[</span>automatically_derived<span class="pl-kos">]</span></span>
<span class="pl-k">impl</span> <span class="pl-kos">&lt;</span><span class="pl-smi">F</span><span class="pl-kos">:</span> <span class="pl-kos">::</span>std<span class="pl-kos">::</span>marker<span class="pl-kos">::</span><span class="pl-smi">Copy</span> + <span class="pl-smi">Foo</span><span class="pl-kos">&gt;</span> <span class="pl-kos">::</span>std<span class="pl-kos">::</span>marker<span class="pl-kos">::</span><span class="pl-smi">Copy</span> <span class="pl-k">for</span> <span class="pl-smi">PairFoo</span><span class="pl-kos">&lt;</span><span class="pl-smi">F</span><span class="pl-kos">&gt;</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span>

<span class="pl-k">fn</span> <span class="pl-en">main</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span></pre></div>
<p dir="auto">This is wrong, because the bound shouldn't be <code class="notranslate">F: Copy</code> but <code class="notranslate">&lt;F as Foo&gt;::T: Copy</code> instead.</p>
<p dir="auto">In the following snippet, <code class="notranslate">PairFoo&lt;F&gt;</code>'s members are all <code class="notranslate">Copy</code> (resp. <code class="notranslate">Clone</code>) whenever <code class="notranslate">F::T</code> is <code class="notranslate">Copy</code> (resp. <code class="notranslate">Clone</code>). In spite of this, neither does <code class="notranslate">#[derive(Copy)] #[derive(Clone)]</code> work, nor can I provide my own <code class="notranslate">Copy</code> impl.</p>
<div class="highlight highlight-source-rust notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="use std::marker::Copy;
use std::clone::Clone;

#[derive(Copy)]
#[derive(Clone)]
struct Pair&lt;T&gt;(pub T, pub T);

trait Foo { type T; }

// #[derive(Copy)]
// #[derive(Clone)]
struct PairFoo&lt;F: Foo&gt;(pub F::T, pub F::T);

// this one doesn't work
impl&lt;F, T&gt; Copy for PairFoo&lt;F&gt;
    where F: Foo&lt;T = T&gt;,
          T: Copy
{
}

// this one does work
impl&lt;F, T&gt; Clone for PairFoo&lt;F&gt;
    where F: Foo&lt;T = T&gt;,
          T: Clone
{
    fn clone(&amp;self) -&gt; PairFoo&lt;F&gt;
    {
        PairFoo(self.0.clone(), self.1.clone())
    }
}"><pre class="notranslate"><span class="pl-k">use</span> std<span class="pl-kos">::</span>marker<span class="pl-kos">::</span><span class="pl-v">Copy</span><span class="pl-kos">;</span>
<span class="pl-k">use</span> std<span class="pl-kos">::</span>clone<span class="pl-kos">::</span><span class="pl-v">Clone</span><span class="pl-kos">;</span>

<span class="pl-c1">#<span class="pl-kos">[</span>derive<span class="pl-kos">(</span><span class="pl-v">Copy</span><span class="pl-kos">)</span><span class="pl-kos">]</span></span>
<span class="pl-c1">#<span class="pl-kos">[</span>derive<span class="pl-kos">(</span><span class="pl-v">Clone</span><span class="pl-kos">)</span><span class="pl-kos">]</span></span>
<span class="pl-k">struct</span> <span class="pl-smi">Pair</span><span class="pl-kos">&lt;</span><span class="pl-smi">T</span><span class="pl-kos">&gt;</span><span class="pl-kos">(</span><span class="pl-k">pub</span> <span class="pl-smi">T</span><span class="pl-kos">,</span> <span class="pl-k">pub</span> <span class="pl-smi">T</span><span class="pl-kos">)</span><span class="pl-kos">;</span>

<span class="pl-k">trait</span> <span class="pl-smi">Foo</span> <span class="pl-kos">{</span> <span class="pl-k">type</span> <span class="pl-smi">T</span><span class="pl-kos">;</span> <span class="pl-kos">}</span>

<span class="pl-c">// #[derive(Copy)]</span>
<span class="pl-c">// #[derive(Clone)]</span>
<span class="pl-k">struct</span> <span class="pl-smi">PairFoo</span><span class="pl-kos">&lt;</span><span class="pl-smi">F</span><span class="pl-kos">:</span> <span class="pl-smi">Foo</span><span class="pl-kos">&gt;</span><span class="pl-kos">(</span><span class="pl-k">pub</span> <span class="pl-smi">F</span><span class="pl-kos">::</span><span class="pl-smi">T</span><span class="pl-kos">,</span> <span class="pl-k">pub</span> <span class="pl-smi">F</span><span class="pl-kos">::</span><span class="pl-smi">T</span><span class="pl-kos">)</span><span class="pl-kos">;</span>

<span class="pl-c">// this one doesn't work</span>
<span class="pl-k">impl</span><span class="pl-kos">&lt;</span><span class="pl-smi">F</span><span class="pl-kos">,</span> <span class="pl-smi">T</span><span class="pl-kos">&gt;</span> <span class="pl-smi">Copy</span> <span class="pl-k">for</span> <span class="pl-smi">PairFoo</span><span class="pl-kos">&lt;</span><span class="pl-smi">F</span><span class="pl-kos">&gt;</span>
    <span class="pl-k">where</span> <span class="pl-smi">F</span><span class="pl-kos">:</span> <span class="pl-smi">Foo</span><span class="pl-kos">&lt;</span><span class="pl-smi">T</span> = <span class="pl-smi">T</span><span class="pl-kos">&gt;</span><span class="pl-kos">,</span>
          <span class="pl-smi">T</span><span class="pl-kos">:</span> <span class="pl-smi">Copy</span>
<span class="pl-kos">{</span>
<span class="pl-kos">}</span>

<span class="pl-c">// this one does work</span>
<span class="pl-k">impl</span><span class="pl-kos">&lt;</span><span class="pl-smi">F</span><span class="pl-kos">,</span> <span class="pl-smi">T</span><span class="pl-kos">&gt;</span> <span class="pl-smi">Clone</span> <span class="pl-k">for</span> <span class="pl-smi">PairFoo</span><span class="pl-kos">&lt;</span><span class="pl-smi">F</span><span class="pl-kos">&gt;</span>
    <span class="pl-k">where</span> <span class="pl-smi">F</span><span class="pl-kos">:</span> <span class="pl-smi">Foo</span><span class="pl-kos">&lt;</span><span class="pl-smi">T</span> = <span class="pl-smi">T</span><span class="pl-kos">&gt;</span><span class="pl-kos">,</span>
          <span class="pl-smi">T</span><span class="pl-kos">:</span> <span class="pl-smi">Clone</span>
<span class="pl-kos">{</span>
    <span class="pl-k">fn</span> <span class="pl-en">clone</span><span class="pl-kos">(</span><span class="pl-c1">&amp;</span><span class="pl-smi">self</span><span class="pl-kos">)</span> -&gt; <span class="pl-smi">PairFoo</span><span class="pl-kos">&lt;</span><span class="pl-smi">F</span><span class="pl-kos">&gt;</span>
    <span class="pl-kos">{</span>
        <span class="pl-v">PairFoo</span><span class="pl-kos">(</span><span class="pl-smi">self</span><span class="pl-kos">.</span><span class="pl-c1">0</span><span class="pl-kos">.</span><span class="pl-en">clone</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-smi">self</span><span class="pl-kos">.</span><span class="pl-c1">1</span><span class="pl-kos">.</span><span class="pl-en">clone</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span>
    <span class="pl-kos">}</span>
<span class="pl-kos">}</span></pre></div>
<p dir="auto">rustc's output:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="&lt;anon&gt;:12:1: 16:2 error: the trait `Copy` may not be implemented for this type; field `&lt;unnamed_field&gt;` does not implement `Copy` [E0204]
&lt;anon&gt;:12 impl&lt;F, T&gt; Copy for PairFoo&lt;F&gt;
&lt;anon&gt;:13     where F: Foo&lt;T = T&gt;,
&lt;anon&gt;:14           T: Copy
&lt;anon&gt;:15 {
&lt;anon&gt;:16 }
error: aborting due to previous error
playpen: application terminated with error code 101"><pre class="notranslate"><code class="notranslate">&lt;anon&gt;:12:1: 16:2 error: the trait `Copy` may not be implemented for this type; field `&lt;unnamed_field&gt;` does not implement `Copy` [E0204]
&lt;anon&gt;:12 impl&lt;F, T&gt; Copy for PairFoo&lt;F&gt;
&lt;anon&gt;:13     where F: Foo&lt;T = T&gt;,
&lt;anon&gt;:14           T: Copy
&lt;anon&gt;:15 {
&lt;anon&gt;:16 }
error: aborting due to previous error
playpen: application terminated with error code 101
</code></pre></div>