2025-01-22 06:40:43 +00:00
|
|
|
//@ revisions: current next
|
|
|
|
|
//@[next] compile-flags: -Znext-solver
|
|
|
|
|
//@ ignore-compare-mode-next-solver (explicit revisions)
|
2014-12-20 02:29:19 -08:00
|
|
|
// Test that a where clause attached to a method allows us to add
|
|
|
|
|
// additional constraints to a parameter out of scope.
|
|
|
|
|
|
|
|
|
|
struct Foo<T> {
|
2025-01-22 06:40:43 +00:00
|
|
|
value: T,
|
2014-12-20 02:29:19 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct Bar; // does not implement Eq
|
|
|
|
|
|
|
|
|
|
impl<T> Foo<T> {
|
2025-01-22 06:40:43 +00:00
|
|
|
fn equals(&self, u: &Foo<T>) -> bool
|
|
|
|
|
where
|
|
|
|
|
T: Eq,
|
|
|
|
|
{
|
2014-12-20 02:29:19 -08:00
|
|
|
self.value == u.value
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
|
let x = Foo { value: Bar };
|
|
|
|
|
x.equals(&x);
|
2020-09-02 10:40:56 +03:00
|
|
|
//~^ ERROR `Bar: Eq` is not satisfied
|
2014-12-20 02:29:19 -08:00
|
|
|
}
|