• kevincox@lemmy.ml
    link
    fedilink
    arrow-up
    0
    ·
    7 months ago

    This is a nice small feature. I’m curious about the commit description:


    foo(const { 1 + 1 })
    

    which is roughly desugared into

    struct Foo;
    impl Foo {
        const FOO: i32 = 1 + 1;
    }
    foo(Foo::FOO)
    

    I would have expected it to desugar to something like:

    foo({
      const TMP: i32 = 1 + 1;
      TMP
    })
    

    But I can’t seem an explanation why the struct with impl is used. I wonder if it has something to do with propagating generics.

    • 0v0@sopuli.xyz
      link
      fedilink
      arrow-up
      0
      ·
      7 months ago

      It’s because it has to work in pattern contexts as well, which are not expressions.

        • 0v0@sopuli.xyz
          link
          fedilink
          arrow-up
          1
          ·
          7 months ago
          fn foo(x: i32) {
              match x {
                  const { 3.pow(3) } => println!("three cubed"),
                  _ => {}
              }
          }
          

          But it looks like inline_const_pat is still unstable, only inline_const in expression position is now stabilized.