2023-07-10 01:10:03 +00:00
|
|
|
#![feature(generic_const_items)]
|
|
|
|
#![allow(incomplete_features)]
|
|
|
|
|
|
|
|
trait Trait<P> {
|
|
|
|
const A: ();
|
|
|
|
const B<const K: u64, const Q: u64>: u64;
|
|
|
|
const C<T>: T;
|
|
|
|
const D<const N: usize>: usize;
|
2024-04-13 15:07:02 +00:00
|
|
|
const E<'a>: &'a ();
|
2023-07-10 01:10:03 +00:00
|
|
|
|
2024-04-13 15:07:02 +00:00
|
|
|
const F: usize;
|
|
|
|
const G<T: PartialEq>: ();
|
2023-07-10 01:10:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl<P> Trait<P> for () {
|
|
|
|
const A<T>: () = ();
|
|
|
|
//~^ ERROR const `A` has 1 type parameter but its trait declaration has 0 type parameters
|
|
|
|
const B<const K: u64>: u64 = 0;
|
|
|
|
//~^ ERROR const `B` has 1 const parameter but its trait declaration has 2 const parameters
|
|
|
|
const C<'a>: &'a str = "";
|
|
|
|
//~^ ERROR const `C` has 0 type parameters but its trait declaration has 1 type parameter
|
|
|
|
const D<const N: u16>: u16 = N;
|
|
|
|
//~^ ERROR const `D` has an incompatible generic parameter for trait `Trait`
|
2024-04-13 15:07:02 +00:00
|
|
|
const E: &'static () = &();
|
|
|
|
//~^ ERROR lifetime parameters or bounds on const `E` do not match the trait declaration
|
2023-07-10 01:10:03 +00:00
|
|
|
|
2024-04-13 15:07:02 +00:00
|
|
|
const F: usize = 1024
|
2023-07-10 01:10:03 +00:00
|
|
|
where
|
|
|
|
P: Copy; //~ ERROR impl has stricter requirements than trait
|
2024-04-13 15:07:02 +00:00
|
|
|
const G<T: Eq>: () = (); //~ ERROR impl has stricter requirements than trait
|
2023-07-10 01:10:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {}
|