diff options
Diffstat (limited to 'tests/ui/higher-rank-trait-bounds/issue-46989.rs')
-rw-r--r-- | tests/ui/higher-rank-trait-bounds/issue-46989.rs | 40 |
1 files changed, 0 insertions, 40 deletions
diff --git a/tests/ui/higher-rank-trait-bounds/issue-46989.rs b/tests/ui/higher-rank-trait-bounds/issue-46989.rs deleted file mode 100644 index 4a09f4be1..000000000 --- a/tests/ui/higher-rank-trait-bounds/issue-46989.rs +++ /dev/null @@ -1,40 +0,0 @@ -// Regression test for #46989: -// -// In the move to universes, this test started passing. -// It is not necessarily WRONG to do so, but it was a bit -// surprising. The reason that it passed is that when we were -// asked to prove that -// -// for<'a> fn(&'a i32): Foo -// -// we were able to use the impl below to prove -// -// fn(&'empty i32): Foo -// -// and then we were able to prove that -// -// fn(&'empty i32) = for<'a> fn(&'a i32) -// -// This last fact is somewhat surprising, but essentially "falls out" -// from handling variance correctly. In particular, consider the subtyping -// relations. First: -// -// fn(&'empty i32) <: for<'a> fn(&'a i32) -// -// This holds because -- intuitively -- a fn that takes a reference but doesn't use -// it can be given a reference with any lifetime. Similarly, the opposite direction: -// -// for<'a> fn(&'a i32) <: fn(&'empty i32) -// -// holds because 'a can be instantiated to 'empty. - -trait Foo {} - -impl<A> Foo for fn(A) {} - -fn assert_foo<T: Foo>() {} - -fn main() { - assert_foo::<fn(&i32)>(); - //~^ ERROR implementation of `Foo` is not general enough -} |