The core team discussed this today. A line has to be drawn somewhere between this special syntactic rule and a general higher-order use of initializers as functions; let f = T.init
is not going to preserve the special rule. In that light, it makes sense to the core team to tie the special behavior to the existing special syntactic rule of type construction: currently, a "call" of T
directly is recognized as always meaning a call to an initializer, whereas this syntax simply adjusts that to sometimes construct a literal. T.init
is then reserved to always mean a higher-order use of the overloaded initializer set.
The proposal is accepted.