use std::mem::MaybeUninit;
-trait Ish {
- const N: usize;
- const F: &'static [&'static str];
+type S = &'static str;
+
+trait Ish { const N: usize; }
+
+trait Has<const N: usize> {
+ const F: [S; N];
}
struct Inner { i: usize, }
impl Ish for Inner {
const N: usize = 1;
- const F: &'static [&'static str] = &["i"];
}
+impl Has<1> for Inner {
+ const F: [S; 1] = ["i"];
+}
+
+struct Outer { o: usize, }
+
+impl Ish for Outer {
+ const N: usize = Inner::N + 1;
+}
+impl Has<{ Inner::N + 1 }> for Outer {
+ const F: [S; 2] = {
+ const TUPLE: ([S;1], [S; Inner::N]) = (
+ ["i"; 1],
+ <Inner as Has<{Inner::N}>>::F,
+ );
+ panic!()
+ };
+}
+
/*
const fn plus<const N: usize>
-(x: &'static [&'static str],
- b: &'static [&'static str],
- ary: &mut [MaybeUninit<&'static str>],
+(x: &'static [S],
+ b: &'static [S],
+ ary: &mut [MaybeUninit<S>],
)
- -> &'static [&'static str]
+ -> &'static [S]
{
// unsafe {
struct Outer { o: usize, }
impl Ish for Outer {
const N: usize = Inner::N + 1;
- const F: &'static [&'static str] = {
- static mut ARY: [MaybeUninit<&'static str>; Inner::N + 1] = [MaybeUninit::uninit(); Inner::N + 1];
+ const F: &'static [S] = {
+ static mut ARY: [MaybeUninit<S>; Inner::N + 1] = [MaybeUninit::uninit(); Inner::N + 1];
plus::<{Inner::N + 1}>(
Inner::F,
*/
fn main(){
- eprintln!("IF {:?}", Inner::F);
+// eprintln!("IF {:?}", Inner::F);
// eprintln!("OF {:?}", Outer::F);
}