Recently, I wanted to write a type holding parameters for a 3D projection:
use std::ops::Range; #[derive(Clone, Copy)] struct CamProj { /// Near and far plane proj_range: Range<f32>, /// Field of view fov: cgmath::Rad<f32>, // `Rad` derives `Copy` /// Width divided by height aspect_ratio: f32, } However, I got this error:
error[E0204]: the trait `Copy` may not be implemented for this type --> <anon>:3:21 | 3 | #[derive(Clone, Copy)] | ^^^^ ... 6 | proj_range: Range<f32>, | ---------------------- this field does not implement `Copy` So apparently, Range<T> never implements Copy, even if T is Copy, like f32 is. Why is that? I thought a Range<T> would just be a pair of Ts? So it surely could implement Copy?