summaryrefslogtreecommitdiffstats
path: root/src/test/ui/regions/regions-outlives-projection-container-hrtb.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/regions/regions-outlives-projection-container-hrtb.rs')
-rw-r--r--src/test/ui/regions/regions-outlives-projection-container-hrtb.rs52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/test/ui/regions/regions-outlives-projection-container-hrtb.rs b/src/test/ui/regions/regions-outlives-projection-container-hrtb.rs
new file mode 100644
index 000000000..152eed5ac
--- /dev/null
+++ b/src/test/ui/regions/regions-outlives-projection-container-hrtb.rs
@@ -0,0 +1,52 @@
+// Test that structs with higher-ranked where clauses don't generate
+// "outlives" requirements. Issue #22246.
+
+#![allow(dead_code)]
+
+pub trait TheTrait<'b> {
+ type TheAssocType;
+}
+
+pub struct TheType<'b> {
+ m: [fn(&'b()); 0]
+}
+
+impl<'a,'b> TheTrait<'a> for TheType<'b> {
+ type TheAssocType = &'b ();
+}
+
+pub struct WithHrAssoc<T>
+ where for<'a> T : TheTrait<'a>
+{
+ m: [T; 0]
+}
+
+fn with_assoc<'a,'b>() {
+ // We get an error because 'b:'a does not hold:
+
+ let _: &'a WithHrAssoc<TheType<'b>> = loop { };
+ //~^ ERROR lifetime may not live long enough
+}
+
+pub trait TheSubTrait : for<'a> TheTrait<'a> {
+}
+
+impl<'b> TheSubTrait for TheType<'b> { }
+
+pub struct WithHrAssocSub<T>
+ where T : TheSubTrait
+{
+ m: [T; 0]
+}
+
+fn with_assoc_sub<'a,'b>() {
+ // The error here is just because `'b:'a` must hold for the type
+ // below to be well-formed, it is not related to the HR relation.
+
+ let _: &'a WithHrAssocSub<TheType<'b>> = loop { };
+ //~^ ERROR lifetime may not live long enough
+}
+
+
+fn main() {
+}