summaryrefslogtreecommitdiffstats
path: root/tests/ui/wf/unnormalized-projection-guides-inference.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/ui/wf/unnormalized-projection-guides-inference.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/ui/wf/unnormalized-projection-guides-inference.rs b/tests/ui/wf/unnormalized-projection-guides-inference.rs
new file mode 100644
index 000000000..ca2d6c2e8
--- /dev/null
+++ b/tests/ui/wf/unnormalized-projection-guides-inference.rs
@@ -0,0 +1,24 @@
+// The WF requirements of the *unnormalized* form of type annotations
+// can guide inference.
+// check-pass
+
+pub trait EqualTo {
+ type Ty;
+}
+impl<X> EqualTo for X {
+ type Ty = X;
+}
+
+trait MyTrait<U: EqualTo<Ty = Self>> {
+ type Out;
+}
+impl<T, U: EqualTo<Ty = T>> MyTrait<U> for T {
+ type Out = ();
+}
+
+fn main() {
+ let _: <_ as MyTrait<u8>>::Out;
+ // We shoud be able to infer a value for the inference variable above.
+ // The WF of the unnormalized projection requires `u8: EqualTo<Ty = _>`,
+ // which is sufficient to guide inference.
+}