about summary refs log tree commit diff
path: root/tests/ui/traits/const-traits/conditionally-const-and-const-params.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/traits/const-traits/conditionally-const-and-const-params.rs')
-rw-r--r--tests/ui/traits/const-traits/conditionally-const-and-const-params.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/ui/traits/const-traits/conditionally-const-and-const-params.rs b/tests/ui/traits/const-traits/conditionally-const-and-const-params.rs
new file mode 100644
index 00000000000..29553884b21
--- /dev/null
+++ b/tests/ui/traits/const-traits/conditionally-const-and-const-params.rs
@@ -0,0 +1,36 @@
+#![feature(const_trait_impl)]
+#![feature(generic_const_exprs)]
+#![allow(incomplete_features)]
+
+struct Foo<const N: usize>;
+
+impl<const N: usize> Foo<N> {
+    fn add<A: [const] Add42>(self) -> Foo<{ A::add(N) }> {
+        //~^ ERROR `[const]` is not allowed here
+        //~| ERROR the trait bound `A: const Add42` is not satisfied
+        Foo
+    }
+}
+
+#[const_trait]
+trait Add42 {
+    fn add(a: usize) -> usize;
+}
+
+impl const Add42 for () {
+    fn add(a: usize) -> usize {
+        a + 42
+    }
+}
+
+fn bar<A: [const] Add42, const N: usize>(_: Foo<N>) -> Foo<{ A::add(N) }> {
+    //~^ ERROR `[const]` is not allowed here
+    //~| ERROR the trait bound `A: const Add42` is not satisfied
+    Foo
+}
+
+fn main() {
+    let foo = Foo::<0>;
+    let foo = bar::<(), _>(foo);
+    let _foo = bar::<(), _>(foo);
+}