summaryrefslogtreecommitdiffstats
path: root/src/test/ui/specialization/default-associated-type-bound-1.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/specialization/default-associated-type-bound-1.rs')
-rw-r--r--src/test/ui/specialization/default-associated-type-bound-1.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/test/ui/specialization/default-associated-type-bound-1.rs b/src/test/ui/specialization/default-associated-type-bound-1.rs
new file mode 100644
index 000000000..c043114b5
--- /dev/null
+++ b/src/test/ui/specialization/default-associated-type-bound-1.rs
@@ -0,0 +1,24 @@
+// Check that we check that default associated types satisfy the required
+// bounds on them.
+
+#![feature(specialization)]
+//~^ WARNING `specialization` is incomplete
+
+trait X {
+ type U: Clone;
+ fn unsafe_clone(&self, x: Option<&Self::U>) {
+ x.cloned();
+ }
+}
+
+// We cannot normalize `<T as X>::U` to `str` here, because the default could
+// be overridden. The error here must therefore be found by a method other than
+// normalization.
+impl<T> X for T {
+ default type U = str;
+ //~^ ERROR the trait bound `str: Clone` is not satisfied
+}
+
+pub fn main() {
+ 1.unsafe_clone(None);
+}