Two things I thought would be simple

Shachar Shemesh shachar at weka.io
Wed Mar 7 14:20:19 UTC 2018


import std.traits;
import std.stdio;

void func(int a, int b=2, int c=3) {
     return a+b+c;
}

void func2(Parameters!func args = ParameterDefaults!func) {
     return func(args);
}

void main() {
     writeln(func2(1));
     writeln(func2(1,1));
     writeln(func2(1,1,1));
}

So, this does not compile. I can do that with a mixin, but I would much 
rather not. Is there a non-Mixin method of copying not only the 
function's signature, but also its default values?

The second thing I thought would be simple is to refer to call a 
struct's member.

struct S {
     void func(int a) {
     }
}

unittest {
     alias v = S.func;

     S s;
     s.v(12); // No property v for type S
     // UFCS to the rescue!
     v(s, 12);
     // function S.func(int a) is not callable using argument types (S, int)

     // Maybe using getMember?
     __traits(getMember, S, "func")(s, 12); // Same error
     // Maybe without UFCS
     s.__traits(getMember, S, "func")(12);
     // identifier expected following ., not __traits
}

Am I missing something?


More information about the Digitalmars-d mailing list