summaryrefslogtreecommitdiffstats
path: root/src/test/ui/associated-types/associated-types-project-from-hrtb-in-struct.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /src/test/ui/associated-types/associated-types-project-from-hrtb-in-struct.rs
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/associated-types/associated-types-project-from-hrtb-in-struct.rs')
-rw-r--r--src/test/ui/associated-types/associated-types-project-from-hrtb-in-struct.rs39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/test/ui/associated-types/associated-types-project-from-hrtb-in-struct.rs b/src/test/ui/associated-types/associated-types-project-from-hrtb-in-struct.rs
new file mode 100644
index 000000000..ed30d86cb
--- /dev/null
+++ b/src/test/ui/associated-types/associated-types-project-from-hrtb-in-struct.rs
@@ -0,0 +1,39 @@
+// Check projection of an associated type out of a higher-ranked trait-bound
+// in the context of a struct definition.
+
+pub trait Foo<T> {
+ type A;
+
+ fn get(&self, t: T) -> Self::A;
+}
+
+struct SomeStruct<I: for<'x> Foo<&'x isize>> {
+ field: I::A
+ //~^ ERROR cannot use the associated type of a trait with uninferred generic parameters
+}
+
+enum SomeEnum<'b, I: for<'a> Foo<&'a isize>> {
+ TupleVariant(I::A),
+ //~^ ERROR cannot use the associated type of a trait with uninferred generic parameters
+ StructVariant { field: I::A },
+ //~^ ERROR cannot use the associated type of a trait with uninferred generic parameters
+ OkVariant(&'b usize),
+}
+
+// FIXME(eddyb) This one doesn't even compile because of the unsupported syntax.
+
+// struct AnotherStruct<I : for<'x> Foo<&'x isize>> {
+// field: <I as for<'y> Foo<&'y isize>>::A
+// }
+
+struct YetAnotherStruct<'a, I: for<'x> Foo<&'x isize>> {
+ field: <I as Foo<&'a isize>>::A,
+}
+
+struct Why<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i, 'j, 'k, 'n, 'o, 'p, 'q, 'r, 's, 't, 'u, 'v, 'w, 'x,
+ 'y, 'z, 'aa, I: for<'l, 'm> Foo<&'l &'m isize>> {
+ field: I::A,
+ //~^ ERROR cannot use the associated type of a trait with uninferred generic parameters
+}
+
+pub fn main() {}