blob: 29553884b21c22120c21a7b409f539e9a6bb0f96 [file] [log] [blame]
#![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);
}