For 1: Yes, the compiler can choose to not type check argument expressions when 
looking up a template or macro in select situations like `foo(a, b)`; it 
doesn't work the same if you do `a.foo(b)`, then `a` has to be typechecked. The 
point of having typed templates/macros is making it easier to overload/clearer 
to understand.

2: Your problem here is the argument order. `foo(a): b` is equivalent to 
`foo(a, b)`, and the following doesn't work:
    
    
    proc foo(a = 3, b: int) = echo a + b
    
    foo(4) # type mismatch
    
    
    Run

I'm sure there's some implementation excuse for this to not be allowed but I 
don't know what it is. You just have to deal with it.

3: This seems to be an oversight, all static[string]s behave like this. I think 
this makes sense, since you can use string literals in backticks and they work 
normally.

Reply via email to