| //@ build-fail | |
| //@ revisions: normal mir-opt | |
| //@ [mir-opt]compile-flags: -Zmir-opt-level=4 | |
| trait C { | |
| const BOO: usize; | |
| } | |
| trait Foo<T> { | |
| const BAR: usize; | |
| } | |
| struct A<T>(T); | |
| impl<T: C> Foo<T> for A<T> { | |
| const BAR: usize = [5, 6, 7][T::BOO]; //~ ERROR evaluation of `<A<()> as Foo<()>>::BAR` failed | |
| } | |
| fn foo<T: C>() -> &'static usize { | |
| &<A<T> as Foo<T>>::BAR //~ constant | |
| } | |
| impl C for () { | |
| const BOO: usize = 42; | |
| } | |
| impl C for u32 { | |
| const BOO: usize = 1; | |
| } | |
| fn main() { | |
| println!("{:x}", foo::<()>() as *const usize as usize); | |
| println!("{:x}", foo::<u32>() as *const usize as usize); | |
| println!("{:x}", foo::<()>()); | |
| println!("{:x}", foo::<u32>()); | |
| } |