使用 tinyvec 时,即使 ArrayVec 和 Item impl Copy

Owe*_*yle 4 rust

有谁知道这里发生了什么?为什么我得到

此字段未实现 Copy

use tinyvec::ArrayVec;

#[derive(Copy, Clone)]
struct Item {
    num: i32
}

#[derive(Copy, Clone)]
struct Test {
    nums: ArrayVec<[Item; 20]>
}

fn main() {

    let mut x = Test {
        nums: ArrayVec::new()
    };

}
Run Code Online (Sandbox Code Playgroud)

kmd*_*eko 11

Copy为实现ArrayVec有以下限制:

impl<A> Copy for ArrayVec<A> where
    A: Array + Copy,
    A::Item: Copy,
{}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,A[Item; 20],因此它实现Copy。然而,[Item; 20] 并不满足约束条件来实现Array

impl<T: Default> Array for [T; 20] {
  // ^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

对于[Item; 20]是一个ArrayItem需要实现Default