Why would closure break type inference?

The problem is not with the closure, but in captured variable T. If you replace T with typeof(first(A)/n) then all be ok. I’m not a big specialist in Julia compiler, but I think that if T is a dynamic DataType then the compiler can’t be sure that it has a constant value in all calls of promote_type, so at compilation time the result type of promote_type(T,…) is Any and for convert its Any too