2023-09-10 15:29:37 -05:00
|
|
|
// Regression test for issue #115720.
|
|
|
|
// If a const item contains generic params from an outer items, only suggest
|
|
|
|
// turning the const item generic if the feature `generic_const_items` is enabled.
|
|
|
|
|
2024-02-16 14:02:50 -06:00
|
|
|
//@ revisions: default generic_const_items
|
2023-09-10 15:29:37 -05:00
|
|
|
|
|
|
|
#![cfg_attr(generic_const_items, feature(generic_const_items))]
|
|
|
|
#![feature(generic_const_exprs)] // only used for the test case "outer struct"
|
|
|
|
#![allow(incomplete_features)]
|
|
|
|
|
|
|
|
fn outer<T: Tr>() { // outer function
|
|
|
|
const K: u32 = T::C;
|
|
|
|
//~^ ERROR can't use generic parameters from outer item
|
|
|
|
//[generic_const_items]~| HELP try introducing a local generic parameter here
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<T> Tr for T { // outer impl block
|
|
|
|
const C: u32 = {
|
|
|
|
const I: u32 = T::C;
|
|
|
|
//~^ ERROR can't use generic parameters from outer item
|
|
|
|
//[generic_const_items]~| HELP try introducing a local generic parameter here
|
|
|
|
I
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
struct S<T: Tr>(U32<{ // outer struct
|
|
|
|
const _: u32 = T::C;
|
|
|
|
//~^ ERROR can't use generic parameters from outer item
|
|
|
|
//[generic_const_items]~| HELP try introducing a local generic parameter here
|
|
|
|
0
|
|
|
|
}>);
|
|
|
|
|
|
|
|
trait Tr {
|
|
|
|
const C: u32;
|
|
|
|
}
|
|
|
|
|
|
|
|
struct U32<const N: u32>;
|
|
|
|
|
|
|
|
fn main() {}
|