diff options
Diffstat (limited to 'tests/ui/impl-unused-tps.rs')
| -rw-r--r-- | tests/ui/impl-unused-tps.rs | 46 |
1 files changed, 20 insertions, 26 deletions
diff --git a/tests/ui/impl-unused-tps.rs b/tests/ui/impl-unused-tps.rs index a5836db3c8e..3eb9daedf76 100644 --- a/tests/ui/impl-unused-tps.rs +++ b/tests/ui/impl-unused-tps.rs @@ -1,35 +1,34 @@ +//~ ERROR overflow evaluating the requirement `([isize; 0], _): Sized + trait Foo<A> { - fn get(&self, A: &A) {} + fn get(&self, A: &A) { } } trait Bar { type Out; } -impl<T> Foo<T> for [isize; 0] { +impl<T> Foo<T> for [isize;0] { // OK, T is used in `Foo<T>`. } -impl<T, U> Foo<T> for [isize; 1] { +impl<T,U> Foo<T> for [isize;1] { //~^ ERROR the type parameter `U` is not constrained } -impl<T, U> Foo<T> for [isize; 2] -where - T: Bar<Out = U>, -{ +impl<T,U> Foo<T> for [isize;2] where T : Bar<Out=U> { // OK, `U` is now constrained by the output type parameter. } -impl<T: Bar<Out = U>, U> Foo<T> for [isize; 3] { +impl<T:Bar<Out=U>,U> Foo<T> for [isize;3] { // OK, same as above but written differently. } -impl<T, U> Foo<T> for U { +impl<T,U> Foo<T> for U { //~^ ERROR conflicting implementations of trait `Foo<_>` for type `[isize; 0]` } -impl<T, U> Bar for T { +impl<T,U> Bar for T { //~^ ERROR the type parameter `U` is not constrained type Out = U; @@ -37,33 +36,28 @@ impl<T, U> Bar for T { // Using `U` in an associated type within the impl is not good enough! } -impl<T, U> Bar for T -where - T: Bar<Out = U>, +impl<T,U> Bar for T + where T : Bar<Out=U> { - //~^^^^ ERROR the type parameter `U` is not constrained by the impl trait, self type, or predicates - //~| ERROR conflicting implementations of trait `Bar` + //~^^^ ERROR the type parameter `U` is not constrained + // This crafty self-referential attempt is still no good. } -impl<T, U, V> Foo<T> for T -where - (T, U): Bar<Out = V>, +impl<T,U,V> Foo<T> for T + where (T,U): Bar<Out=V> { - //~^^^^ ERROR the type parameter `U` is not constrained - //~| ERROR the type parameter `V` is not constrained - //~| ERROR conflicting implementations of trait `Foo<[isize; 0]>` for type `[isize; 0]` + //~^^^ ERROR the type parameter `U` is not constrained + //~| ERROR the type parameter `V` is not constrained // Here, `V` is bound by an output type parameter, but the inputs // are not themselves constrained. } -impl<T, U, V> Foo<(T, U)> for T -where - (T, U): Bar<Out = V>, +impl<T,U,V> Foo<(T,U)> for T + where (T,U): Bar<Out=V> { - //~^^^^ ERROR conflicting implementations of trait `Foo<([isize; 0], _)>` for type `[isize; 0]` // As above, but both T and U ARE constrained. } -fn main() {} +fn main() { } |
