chiark / gitweb /
THING
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 16 May 2022 15:19:51 +0000 (16:19 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 16 May 2022 15:19:51 +0000 (16:19 +0100)
src/main.rs

index abdbbbea68a9779e3984e5e01666d85a8dce1a67..3e80125352a63041583ff9686604913ebe26228f 100644 (file)
@@ -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 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 {
         
@@ -32,8 +53,8 @@ const fn plus<const N: usize>
 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,
@@ -45,6 +66,6 @@ impl Ish for Outer {
 */
 
 fn main(){
-    eprintln!("IF {:?}", Inner::F);
+//    eprintln!("IF {:?}", Inner::F);
 //    eprintln!("OF {:?}", Outer::F);
 }