Like that: `someType(someValue)` (or, what's the same, `someValue.someType`) means "convert this value to this type", and compiler should consider these types (that of the value, and to which you convert) as compatible to allow this operation, and it can use an additional transformation for this (you can define it creating a `converter` for these types).
`cast[someType](someValue)`, on the other hand, means just "interpret this value (its bits sequence) as being of such a type"; it doesn't involve any compatibility-checks nor transformations of the value - you relief the compiler of responsibility for validity of type change; so you can convert between formally incompatible types - just make sure, that the cast really makes sense (as in this instance - one type is pointer, the other - a procedure - is really a pointer too). I think you can find it in the manual, and possibly it's better described there.