Skip to content

Commit a0efe3c

Browse files
committed
Remove T: Clone bound from From<array/vec> for SmallVec
1 parent 8445d21 commit a0efe3c

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1909,12 +1909,12 @@ impl<'a, T: Clone, const N: usize> From<&'a [T]> for SmallVec<T, N> {
19091909
slice.iter().cloned().collect()
19101910
}
19111911
}
1912-
impl<T: Clone, const N: usize> From<[T; N]> for SmallVec<T, N> {
1912+
impl<T, const N: usize> From<[T; N]> for SmallVec<T, N> {
19131913
fn from(array: [T; N]) -> Self {
19141914
Self::from_buf(array)
19151915
}
19161916
}
1917-
impl<T: Clone, const N: usize> From<Vec<T>> for SmallVec<T, N> {
1917+
impl<T, const N: usize> From<Vec<T>> for SmallVec<T, N> {
19181918
fn from(array: Vec<T>) -> Self {
19191919
Self::from_vec(array)
19201920
}

src/tests.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -644,6 +644,18 @@ fn test_from() {
644644
let small_vec: SmallVec<u8, 128> = SmallVec::from(array);
645645
assert_eq!(&*small_vec, vec![99u8; 128].as_slice());
646646
drop(small_vec);
647+
648+
#[derive(PartialEq, Eq, Debug)]
649+
struct NoClone(u8);
650+
let array = [NoClone(42)];
651+
let small_vec: SmallVec<NoClone, 1> = SmallVec::from(array);
652+
assert_eq!(&*small_vec, &[NoClone(42)]);
653+
drop(small_vec);
654+
655+
let vec = vec![NoClone(42)];
656+
let small_vec: SmallVec<NoClone, 1> = SmallVec::from(vec);
657+
assert_eq!(&*small_vec, &[NoClone(42)]);
658+
drop(small_vec);
647659
}
648660

649661
#[test]

0 commit comments

Comments
 (0)