On 27/10/2010 21:02, "Jérôme M. Berger" wrote:
div0 wrote:
On 27/10/2010 20:36, sergk wrote:
class Foo(T) {
      this(T t) {
          bar = t;
      }
      T bar;
}

void main() {
      auto a = new Foo(123); // doesn't work
      auto b = new Foo!(int)(123); // work, but redundant
}

Is there any technical limitations preventing this, or its just a
compiler bug?

It's not a bug.

I guess it could be a short cut, but it can only ever work when the
class has exactly one constructor, which seems a bit of a pointless
short cut and adds an unneccassiry corner case to the language spec.

        Why would it only be able to work when there is exactly one
constructor? Doesn't function overloading work with templates?

        This works here:

void foo(T) (T x) {
}

void foo(T, U) (T x, U y) {
}

void main()
{
     foo (3);
     foo (3, "azerty");
}

                Jerome

class Foo(T) {
       this(T t) {
           bar = t;
       }

        this(string x) {
        }

        this(int x) {
        }

       T bar;
}

auto    f0 = new Foo("wtf?");
auto    f1 = new Foo(42);

What's T in any of the above?

There's no obvious answer for the first 2 and anything anybody says will be a source of endless arguments and bike shedding.

--
My enormous talent is exceeded only by my outrageous laziness.
http://www.ssTk.co.uk

Reply via email to