У меня есть структура, которую я хочу использовать в качестве ключа в BTreeMap
, поэтому я реализую PartialEq
, Eq
, PartialOrd
и Ord
. Последнее вызывает проблему, поскольку существует небезопасный метод clamp
.
Я реализую его следующим образом:
use std::cmp::Ordering;
#[derive(Debug, Eq, Copy, Clone)]
struct Baz(usize);
impl PartialEq for Baz {
fn eq(&self, other: &Self) -> bool {
self.0.eq(&other.0)
}
fn ne(&self, other: &Self) -> bool {
self.0.ne(&other.0)
}
}
impl PartialOrd for Baz {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
self.0.partial_cmp(&other.0)
}
fn lt(&self, other: &Self) -> bool {
self.0.lt(&other.0)
}
fn le(&self, other: &Self) -> bool {
self.0.le(&other.0)
}
fn gt(&self, other: &Self) -> bool {
self.0.gt(&other.0)
}
fn ge(&self, other: &Self) -> bool {
self.0.ge(&other.0)
}
}
impl Ord for Baz {
fn cmp(&self, other: &Self) -> Ordering {
self.0.cmp(&other.0)
}
fn max(self, other: Self) -> Self
where
Self: Sized,
{
Self(self.0.max(other.0))
}
fn min(self, other: Self) -> Self
where
Self: Sized,
{
Self(self.0.min(other.0))
}
fn clamp(self, min: Self, max: Self) -> Self
where
Self: Sized,
{
Self(self.0.clamp(min.0, max.0))
}
}
fn main() {
Baz(1);
}
Детская площадка
Насколько я знаю, зажим для целых чисел безопасен и должен работать просто отлично, но Rust выдает мне ошибку
error[E0658]: use of unstable library feature 'clamp'
--> src/main.rs:57:5
|
57 | / fn clamp(self, min: Self, max: Self) -> Self
58 | | where
59 | | Self: Sized,
60 | | {
61 | | Self(self.0.clamp(min.0, max.0))
62 | | }
| |_____^
|
= note: for more information, see https://github.com/rust-lang/rust/issues/44095
error[E0658]: use of unstable library feature 'clamp'
--> src/main.rs:61:21
|
61 | Self(self.0.clamp(min.0, max.0))
| ^^^^^
|
= note: for more information, see https://github.com/rust-lang/rust/issues/44095
Как я могу решить эту проблему? Я использую Rust 1.41.