summaryrefslogtreecommitdiffstats
path: root/tests/ui/higher-rank-trait-bounds/issue-46989.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/higher-rank-trait-bounds/issue-46989.rs')
-rw-r--r--tests/ui/higher-rank-trait-bounds/issue-46989.rs40
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
-}