2022-08-22 06:28:01 -05:00
|
|
|
// revisions: nn ny yn yy
|
2022-08-09 12:41:49 -05:00
|
|
|
// check-pass
|
2022-08-22 06:28:01 -05:00
|
|
|
#![feature(const_trait_impl, associated_type_defaults, const_mut_refs)]
|
2022-08-09 12:41:49 -05:00
|
|
|
|
2022-08-22 06:28:01 -05:00
|
|
|
#[cfg_attr(any(yn, yy), const_trait)]
|
2022-08-09 12:41:49 -05:00
|
|
|
pub trait Index {
|
|
|
|
type Output;
|
|
|
|
}
|
|
|
|
|
2022-08-22 06:28:01 -05:00
|
|
|
#[cfg_attr(any(ny, yy), const_trait)]
|
2022-08-09 12:41:49 -05:00
|
|
|
pub trait IndexMut where Self: Index {
|
2022-08-22 06:28:01 -05:00
|
|
|
const C: <Self as Index>::Output;
|
|
|
|
type Assoc = <Self as Index>::Output;
|
|
|
|
fn foo(&mut self, x: <Self as Index>::Output) -> <Self as Index>::Output;
|
2022-08-09 12:41:49 -05:00
|
|
|
}
|
|
|
|
|
2022-08-22 06:28:01 -05:00
|
|
|
impl Index for () { type Output = (); }
|
|
|
|
|
2022-08-28 01:27:31 -05:00
|
|
|
#[cfg(not(any(nn, yn)))]
|
2022-08-22 06:28:01 -05:00
|
|
|
impl const IndexMut for <() as Index>::Output {
|
|
|
|
const C: <Self as Index>::Output = ();
|
|
|
|
type Assoc = <Self as Index>::Output;
|
2022-08-22 06:41:38 -05:00
|
|
|
fn foo(&mut self, x: <Self as Index>::Output) -> <Self as Index>::Output
|
|
|
|
where <Self as Index>::Output:,
|
|
|
|
{}
|
2022-08-22 06:28:01 -05:00
|
|
|
}
|
|
|
|
|
2022-08-28 01:27:31 -05:00
|
|
|
#[cfg(any(nn, yn))]
|
|
|
|
impl IndexMut for <() as Index>::Output {
|
|
|
|
const C: <Self as Index>::Output = ();
|
|
|
|
type Assoc = <Self as Index>::Output;
|
|
|
|
fn foo(&mut self, x: <Self as Index>::Output) -> <Self as Index>::Output
|
|
|
|
where <Self as Index>::Output:,
|
|
|
|
{}
|
|
|
|
}
|
|
|
|
|
2022-08-22 06:28:01 -05:00
|
|
|
const C: <() as Index>::Output = ();
|
|
|
|
|
2022-08-09 12:41:49 -05:00
|
|
|
fn main() {}
|