2019-12-13 21:28:32 -06:00
|
|
|
//@ build-fail
|
|
|
|
|
2018-11-21 03:54:46 -06:00
|
|
|
// a test demonstrating that const qualification cannot prevent monomorphization time errors
|
|
|
|
|
|
|
|
trait Foo {
|
|
|
|
const X: u32;
|
|
|
|
}
|
|
|
|
|
|
|
|
trait Bar<U: Foo> {
|
2022-09-21 06:05:20 -05:00
|
|
|
const F: u32 = 100 / U::X; //~ ERROR evaluation of `<std::string::String as Bar<std::string::String>>::F` failed
|
2018-11-21 03:54:46 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
2022-11-15 05:06:20 -06:00
|
|
|
let y = <String as Bar<String>>::F; //~ constant
|
2018-11-21 03:54:46 -06:00
|
|
|
}
|