summaryrefslogtreecommitdiffstats
path: root/tests/ui/associated-inherent-types/dispatch-on-self-type-1.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/associated-inherent-types/dispatch-on-self-type-1.rs')
-rw-r--r--tests/ui/associated-inherent-types/dispatch-on-self-type-1.rs39
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/ui/associated-inherent-types/dispatch-on-self-type-1.rs b/tests/ui/associated-inherent-types/dispatch-on-self-type-1.rs
new file mode 100644
index 000000000..9b0fa8dc6
--- /dev/null
+++ b/tests/ui/associated-inherent-types/dispatch-on-self-type-1.rs
@@ -0,0 +1,39 @@
+// check-pass
+
+#![feature(inherent_associated_types, auto_traits, negative_impls)]
+#![allow(incomplete_features)]
+
+use std::cmp::Ordering;
+
+// Check that inherent associated types are dispatched on the concrete Self type.
+
+struct Select<T, U>(T, U);
+
+impl<T: Ordinary, U: Ordinary> Select<T, U> {
+ type Type = ();
+}
+
+impl<T: Ordinary> Select<T, Special> {
+ type Type = bool;
+}
+
+impl<T: Ordinary> Select<Special, T> {
+ type Type = Ordering;
+}
+
+impl Select<Special, Special> {
+ type Type = (bool, bool);
+}
+
+fn main() {
+ let _: Select<String, Special>::Type = false;
+ let _: Select<Special, Special>::Type = (true, false);
+ let _: Select<Special, u8>::Type = Ordering::Equal;
+ let _: Select<i128, ()>::Type = ();
+}
+
+enum Special {}
+
+impl !Ordinary for Special {}
+
+auto trait Ordinary {}