2022-08-22 11:28:01 +00:00
|
|
|
//@ revisions: nn ny yn yy
|
2024-06-30 17:08:45 +00:00
|
|
|
//@ compile-flags: -Znext-solver
|
2024-06-30 11:30:55 -04:00
|
|
|
//@ check-pass
|
|
|
|
|
2024-06-25 09:50:01 +00:00
|
|
|
#![allow(incomplete_features)]
|
2024-10-30 18:03:44 +00:00
|
|
|
#![feature(const_trait_impl, associated_type_defaults)]
|
2022-08-09 17:41:49 +00:00
|
|
|
|
2022-08-22 11:28:01 +00:00
|
|
|
#[cfg_attr(any(yn, yy), const_trait)]
|
2022-08-09 17:41:49 +00:00
|
|
|
pub trait Index {
|
|
|
|
type Output;
|
|
|
|
}
|
|
|
|
|
2022-08-22 11:28:01 +00:00
|
|
|
#[cfg_attr(any(ny, yy), const_trait)]
|
2022-08-09 17:41:49 +00:00
|
|
|
pub trait IndexMut where Self: Index {
|
2022-08-22 11:28:01 +00: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 17:41:49 +00:00
|
|
|
}
|
|
|
|
|
2022-08-22 11:28:01 +00:00
|
|
|
impl Index for () { type Output = (); }
|
|
|
|
|
2022-08-28 06:27:31 +00:00
|
|
|
#[cfg(not(any(nn, yn)))]
|
2022-08-22 11:28:01 +00:00
|
|
|
impl const IndexMut for <() as Index>::Output {
|
|
|
|
const C: <Self as Index>::Output = ();
|
|
|
|
type Assoc = <Self as Index>::Output;
|
2022-08-22 11:41:38 +00:00
|
|
|
fn foo(&mut self, x: <Self as Index>::Output) -> <Self as Index>::Output
|
|
|
|
where <Self as Index>::Output:,
|
|
|
|
{}
|
2022-08-22 11:28:01 +00:00
|
|
|
}
|
|
|
|
|
2022-08-28 06:27:31 +00: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 11:28:01 +00:00
|
|
|
const C: <() as Index>::Output = ();
|
|
|
|
|
2022-08-09 17:41:49 +00:00
|
|
|
fn main() {}
|