diff options
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.rs | 36 | 
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); +}  | 
