diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index 99fd625504..67f6a66db6 100644 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -950,7 +950,8 @@ proc liftParamType(c: PContext, procKind: TSymKind, genericParams: PNode, if tfUnresolved notin paramType.flags: # naked typedescs are not bindOnce types if paramType.base.kind == tyNone and paramTypId != nil and - paramTypId.id == getIdent(c.cache, "typedesc").id: + (paramTypId.id == getIdent(c.cache, "typedesc").id or + paramTypId.id == getIdent(c.cache, "type").id): # XXX Why doesn't this check for tyTypeDesc instead? paramTypId = nil let t = c.newTypeWithSons(tyTypeDesc, @[paramType.base]) diff --git a/tests/metatype/tbindtypedesc.nim b/tests/metatype/tbindtypedesc.nim index cfa80e5814..d9f034432b 100644 --- a/tests/metatype/tbindtypedesc.nim +++ b/tests/metatype/tbindtypedesc.nim @@ -82,3 +82,14 @@ reject bindArg(int, string, 10.0, 20, "test", "nest") reject bindArg(int, string, "test", "nest", 10, 20) echo "ok" + +#11058: +template test(S: type, U: type) = + discard + +test(int, float) + +proc test2(S: type, U: type) = + discard + +test2(float, int)