September 19, 2016 Help with "cannot alias an expression" compile error | ||||
---|---|---|---|---|
| ||||
I'm trying to do some form of reflection abstraction, here's my sample code: import std.meta; struct Fields(T) { private static alias toField(alias e) = Field!(__traits(identifier, e)); alias fields = staticMap!(toField, T.tupleof); static alias map(alias F) = staticMap!(F, fields); static alias filter(alias pred) = Filter!(pred, fields); } struct Field(string n) { enum name = n; } struct Foo { int a; } void main() { Foo value; enum toName(alias e) = e.name; enum pred(alias e) = true; alias a = Fields!(Foo).filter!(pred); // works alias b = Fields!(Foo).map!(toName); // works alias c = Fields!(Foo).init.filter!(pred); // works alias d = Fields!(Foo).init.map!(toName); // Error: alias d cannot alias an expression Fields().tuple("a") } Alias "a" and "b" compiles just fine. Alias "c" compiles as well but not alias "d", which I don't understand why. I'm fully aware that it's not possible to alias an expression, but what I want is to alias the tuple of strings that is returned. -- /Jacob Carlborg |
Copyright © 1999-2021 by the D Language Foundation