On 24 July 2014 16:22, Daniel Murphy via Digitalmars-d < [email protected]> wrote:
> "Manu via Digitalmars-d" <[email protected]> wrote in message > news:[email protected]... > > The other case I am running in to is when I have 'struct S(T)' or 'class >> C(T)', where T > can be inferred from the constructor, but it isn't. >> >> struct S(T) >> { >> this(T t) >> { >> m = t; >> } >> >> T m; >> } >> > > Infer this: > > struct S(T) > { > static if (is(T == int)) > this(float x) {} > static if (is(T == float)) > this(int x) {} > } > I imagine that would be a compile error; the static if can't be resolved without knowing T, and prior to resolution of the static if, no constructors exist. Also, the constructor args don't reference T anyway, so I see no reason why it would ever want to try and deduce T in this situation. In my example, the constructor implies T, in your example, T implies the constructor... it doesn't make logical sense the way you present. Personally, I wouldn't want the compiler to attempt to deduce T in this case you present, even if it were theoretically possible. It looks like the programmer intended something very specific in this case. I'd rather have compile errors when I pass incorrect things to explicit argument types.
