type MyInt = object bitWidth: int template toRealType*(t: MyInt): typedesc = when t.bitWidth == 32: int32 elif t.bitWidth == 64: int64 else: {.error.} proc doFail(T: typedesc): T = default(T) proc test = const myInt = MyInt(bitWidth:32) discard doFail(toRealType(myInt)) test()