2018-08-30 07:18:55 -05:00
|
|
|
// run-pass
|
2021-03-04 07:35:11 -06:00
|
|
|
// compile-flags:-Zmir-opt-level=3
|
2017-11-10 05:31:51 -06:00
|
|
|
|
|
|
|
pub enum Enum {
|
|
|
|
A,
|
|
|
|
B,
|
|
|
|
}
|
|
|
|
|
|
|
|
trait SliceIndex {
|
|
|
|
type Output;
|
|
|
|
fn get(&self) -> &Self::Output;
|
|
|
|
}
|
|
|
|
|
|
|
|
impl SliceIndex for usize {
|
|
|
|
type Output = Enum;
|
|
|
|
#[inline(never)]
|
|
|
|
fn get(&self) -> &Enum {
|
|
|
|
&Enum::A
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[inline(always)]
|
|
|
|
fn index<T: SliceIndex>(t: &T) -> &T::Output {
|
|
|
|
t.get()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
match *index(&0) { Enum::A => true, _ => false };
|
|
|
|
}
|