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.