From 4d349d418901c04ce3930616d4d148cf292fd986 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 16 May 2022 16:19:51 +0100 Subject: [PATCH] THING --- src/main.rs | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/src/main.rs b/src/main.rs index abdbbbe..3e80125 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,24 +4,45 @@ 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 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], + >::F, + ); + panic!() + }; +} + /* const fn plus -(x: &'static [&'static str], - b: &'static [&'static str], - ary: &mut [MaybeUninit<&'static str>], +(x: &'static [S], + b: &'static [S], + ary: &mut [MaybeUninit], ) - -> &'static [&'static str] + -> &'static [S] { // unsafe { @@ -32,8 +53,8 @@ const fn plus 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; Inner::N + 1] = [MaybeUninit::uninit(); Inner::N + 1]; plus::<{Inner::N + 1}>( Inner::F, @@ -45,6 +66,6 @@ impl Ish for Outer { */ fn main(){ - eprintln!("IF {:?}", Inner::F); +// eprintln!("IF {:?}", Inner::F); // eprintln!("OF {:?}", Outer::F); } -- 2.30.2