The second `template foo` is fully untyped, while the first one has a typed 
argument. Fully untyped macros/templates get transformed early at a syntax 
level in generic procs so they sometimes bypass generic prechecks. (For now 
anyway)

The `bind` behavior was added later as a quick workaround to keep old behavior 
in cases where the compiler gives a direct warning, it should probably be 
avoided in a more straightforward way like just renaming the value. Similar to 
how you would deal with:
    
    
    let foo = 123
    block:
      let foo = 456
      # how to access the old foo?
    
    
    Run

Reply via email to