| // build-fail |
| |
| #![allow(const_err)] |
| |
| // a test demonstrating that const qualification cannot prevent monomorphization time errors |
| |
| trait Foo { |
| const X: u32; |
| } |
| |
| trait Bar<U: Foo> { |
| const F: u32 = 100 / U::X; |
| } |
| |
| impl Foo for () { |
| const X: u32 = 42; |
| } |
| |
| impl Foo for String { |
| const X: u32 = 0; |
| } |
| |
| impl Bar<()> for () {} |
| impl Bar<String> for String {} |
| |
| fn main() { |
| let x = <() as Bar<()>>::F; |
| // this test only causes errors due to the line below, so post-monomorphization |
| let y = <String as Bar<String>>::F; //~ ERROR erroneous constant |
| } |