//@ build-pass | |
#![feature(default_field_values)] | |
struct W<const X: usize>; | |
impl<const X: usize> W<X> { | |
const fn new() -> Self { W } | |
} | |
struct Z<const X: usize> { | |
// No inference. | |
one: W<X> = W::<X>::new(), | |
// Inference works too. | |
two: W<X> = W::new(), | |
// An anon const that is too generic before substitution. | |
too_generic: usize = X + 1, | |
} | |
fn use_generically<const X: usize>() { | |
let x: Z<X> = Z { .. }; | |
} | |
fn main() { | |
let x: Z<0> = Z { .. }; | |
use_generically::<0>(); | |
} |