summaryrefslogtreecommitdiffstats
path: root/src/test/ui/traits/elaborate-type-region.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/traits/elaborate-type-region.rs')
-rw-r--r--src/test/ui/traits/elaborate-type-region.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/test/ui/traits/elaborate-type-region.rs b/src/test/ui/traits/elaborate-type-region.rs
new file mode 100644
index 000000000..03aef0184
--- /dev/null
+++ b/src/test/ui/traits/elaborate-type-region.rs
@@ -0,0 +1,49 @@
+// run-pass
+#![allow(dead_code)]
+
+// Test that we elaborate `Type: 'region` constraints and infer various important things.
+
+trait Master<'a, T: ?Sized> {
+ fn foo() where T: 'a;
+}
+
+// [U]: 'a => U: 'a
+impl<'a, U> Master<'a, [U]> for () {
+ fn foo() where U: 'a { }
+}
+
+// &'b U: 'a => 'b: 'a, U: 'a
+impl<'a, 'b, U> Master<'a, &'b U> for () {
+ fn foo() where 'b: 'a, U: 'a { }
+}
+
+// &'b [U]: 'a => 'b: 'a, U: 'a
+impl<'a, 'b, U> Master<'a, &'b [U]> for () {
+ fn foo() where 'b: 'a, U: 'a { }
+}
+
+// Foo<'b>: 'a => 'b: 'a
+struct Foo<'a> { x: &'a () }
+impl<'a, 'b> Master<'a, Foo<'b>> for () {
+ fn foo() where 'b: 'a { }
+}
+
+// Bar<'b, T>: 'a => 'b: 'a, T: 'a
+struct Bar<'a, T: 'a> { x: &'a T }
+impl<'a, 'b, T> Master<'a, Bar<'b, T>> for () {
+ fn foo() where 'b: 'a, T: 'a { }
+}
+
+// fn(T): 'a => T: 'a
+impl<'a, T> Master<'a, fn(T)> for () {
+ fn foo() where T: 'a { }
+}
+
+// fn() -> T: 'a => T: 'a
+impl<'a, T> Master<'a, fn() -> T> for () {
+ fn foo() where T: 'a { }
+}
+
+fn main() {
+ println!("Hello, world!");
+}