It seems that, when you say:
    
    
    proc init*[T: Foo](_: typedesc[T]): auto
    
    
    Run

`T` is inferred based on `_` (the first argument).

When the first arg is `Foo[string]` (which is of the type 
`typedesc[Foo[string]]`), `T` is inferred as `Foo[string]`. As `Foo` (without 
generic arg) is not `Foo[string]`, but its superset, "`Foo` is `T`" will be 
evaluated to false.

However if it is `Foo` (which has the type `typedesc[Foo]` ), then `T` is 
inferred as `Foo` (with no generic arg) and thus "`Foo` is `T`" is true.

This is also the first time I see this trick.

Reply via email to