33 lines
766 B
Rust
33 lines
766 B
Rust
use std::borrow::Borrow;
|
|
use std::cmp::Ordering;
|
|
use std::marker::PhantomData;
|
|
|
|
#[derive(PartialEq, Default)]
|
|
//~^ ERROR conflicting implementations of trait `PartialEq<Interval<_>>` for type `Interval<_>`
|
|
pub(crate) struct Interval<T>(PhantomData<T>);
|
|
|
|
// This impl overlaps with the `derive` unless we reject the nested
|
|
// `Interval<?1>: PartialOrd<Interval<?1>>` candidate which results
|
|
// in a -- currently inductive -- cycle.
|
|
impl<T, Q> PartialEq<Q> for Interval<T>
|
|
where
|
|
T: Borrow<Q>,
|
|
Q: ?Sized + PartialOrd,
|
|
{
|
|
fn eq(&self, _: &Q) -> bool {
|
|
true
|
|
}
|
|
}
|
|
|
|
impl<T, Q> PartialOrd<Q> for Interval<T>
|
|
where
|
|
T: Borrow<Q>,
|
|
Q: ?Sized + PartialOrd,
|
|
{
|
|
fn partial_cmp(&self, _: &Q) -> Option<Ordering> {
|
|
None
|
|
}
|
|
}
|
|
|
|
fn main() {}
|