On 24 July 2014 16:22, Daniel Murphy via Digitalmars-d <digitalmars-d@puremagic.com> wrote:
"Manu via Digitalmars-d" <digitalmars-d@puremagic.com> wrote in message news:mailman.243.1406177619.32463.digitalmars-d@puremagic.com...

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.