On 2015-05-31 04:08:33 +0000, ketmar <ket...@ketmar.no-ip.org> said:

my work now allows this:
  string test (string a, string b=3D"wow", string c=3D"heh") {
    return a~b~c;
  }

  void main () {
    enum str =3D test(c: "cc", a: "aa");
    assert(str =3D=3D "aawowcc");
  }

How does it handle overloading?

        string test(bool a, string b="wow", string c="heh") {}
        string test(bool a, string c="heh", bool d=true) {}

        test(a: true, c: "hi"); // ambiguous!

The irony of this example is that without argument names (or more precisely without reordering), there'd be no ambiguity here.


and this:
  void test(A...) (A a) {
    import std.stdio;
    foreach (auto t; a) writeln(t);
  }

  void main () {
    test(x: 33.3, z: 44.4, a: 9999, 7777, d:"Yehaw");
  }

For that to be really useful the argument names should be part of the "A" type so you can forward them to another function and it still works. For instance:

        void test(string a, string b="wow", string c="heh") {}

        void forward(A...)(A a) {
                test(a);
        }

        void main() {
                forward(c: "cc", a: "aa");
        }


--
Michel Fortin
michel.for...@michelf.ca
http://michelf.ca

Reply via email to