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.

Reply via email to