about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2015-02-19 06:59:37 -0500
committerFlavio Percoco <flaper87@gmail.com>2015-02-22 02:14:26 +0100
commitf7a75e0341b6192b20bc271c4a165b9a53d34ff4 (patch)
treeb20e9a2e8d2cd4268125a982f837b6a069f19f63
parent7213ef1a8fd3cb7e479d53fdb287c6c612b9fb93 (diff)
downloadrust-f7a75e0341b6192b20bc271c4a165b9a53d34ff4.tar.gz
rust-f7a75e0341b6192b20bc271c4a165b9a53d34ff4.zip
Add new test case showing that supertraits are not enough
-rw-r--r--src/test/compile-fail/typeck-default-trait-impl-trait-where-clause.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/test/compile-fail/typeck-default-trait-impl-trait-where-clause.rs b/src/test/compile-fail/typeck-default-trait-impl-trait-where-clause.rs
new file mode 100644
index 00000000000..85bca7f248c
--- /dev/null
+++ b/src/test/compile-fail/typeck-default-trait-impl-trait-where-clause.rs
@@ -0,0 +1,38 @@
+// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// Test that when a `..` impl applies, we also check that any
+// supertrait conditions are met.
+
+#![feature(optin_builtin_traits)]
+
+trait NotImplemented { }
+
+trait MyTrait
+    where Option<Self> : NotImplemented
+{}
+
+impl NotImplemented for i32 {}
+
+impl MyTrait for .. {}
+
+fn foo<T:MyTrait>() {
+    bar::<Option<T>>()
+        //~^ ERROR not implemented for the type `Option<T>`
+        //
+        // This should probably typecheck. This is #20671.
+}
+
+fn bar<T:NotImplemented>() { }
+
+fn main() {
+    foo::<i32>(); //~ ERROR not implemented for the type `i32`
+    bar::<Option<i32>>(); //~ ERROR not implemented for the type `Option<i32>`
+}