import std.stdio;
class Foo
{
void xyz() { writeln("Xyz without arguments exists!"); }
void opDispatch(string name, T...)(T args)
in
{
static assert (name == "foo" || name == "baz", "Invalid method called!");
}
body
{
writeln("Called method: ", name);
foreach (i, arg; args) writefln("args[%d] == %s", i, arg);
}
}
void main()
{
Foo bar = new Foo();
bar.baz();
bar.xyz();
bar.foo("hello", [5,10,15], 3.14f, ["foo":5, "bar":10], true);
}
aW1wb3J0IHN0ZC5zdGRpbzsKCmNsYXNzIEZvbwp7CiAgICB2b2lkIHh5eigpIHsgd3JpdGVsbigiWHl6IHdpdGhvdXQgYXJndW1lbnRzIGV4aXN0cyEiKTsgfQoKICAgIHZvaWQgb3BEaXNwYXRjaChzdHJpbmcgbmFtZSwgVC4uLikoVCBhcmdzKQogICAgaW4KICAgIHsKICAgICAgICBzdGF0aWMgYXNzZXJ0IChuYW1lID09ICJmb28iIHx8IG5hbWUgPT0gImJheiIsICJJbnZhbGlkIG1ldGhvZCBjYWxsZWQhIik7CiAgICB9CiAgICBib2R5CiAgICB7CiAgICAgICAgd3JpdGVsbigiQ2FsbGVkIG1ldGhvZDogIiwgbmFtZSk7CiAgICAgICAgZm9yZWFjaCAoaSwgYXJnOyBhcmdzKSB3cml0ZWZsbigiYXJnc1slZF0gPT0gJXMiLCBpLCBhcmcpOwogICAgfQp9Cgp2b2lkIG1haW4oKQp7CiAgICBGb28gYmFyID0gbmV3IEZvbygpOwogICAgYmFyLmJheigpOwogICAgYmFyLnh5eigpOwogICAgYmFyLmZvbygiaGVsbG8iLCBbNSwxMCwxNV0sIDMuMTRmLCBbImZvbyI6NSwgImJhciI6MTBdLCB0cnVlKTsKfQ==