Минимальный пример:
use std::collections::HashSet;
struct Something {
a: HashSet<Point>,
b: HashSet<Point>
}
impl Something {
fn TEST(&self) {
let new = self.a | self.b;
}
}
#[derive(Eq, PartialEq, Hash, Copy, Clone)]
struct Point {
x: usize,
y: usize
}
Проверьте это на Rust Playground . Если вы попытаетесь скомпилировать этот код, Rust пожалуется на error[E0369]: no implementation for std::collections::HashSet<Point> | std::collections::HashSet<Point>
.
Но согласно документам для HashSet, по крайней мере, насколько я понимаю, черта BitOr
должна быть реализован для HashSet, где T: Eq + Hash + Clone
, который Point
явно здесь. Так что же на самом деле происходит, и как мне это исправить?