Making enum join variadic
Artur Skawina via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri May 2 08:17:51 PDT 2014
On 05/02/14 15:38, "Nordlöw" via Digitalmars-d-learn wrote:
>
> template MemberNamesUnion(E...) if (allSatisfy!(isEnum, E))
> {
> bool[string] allMembers; // used to detect member collisions
> mixin({
> string r = "enum MemberNamesUnion { ";
> foreach (T; E) {
> import std.range: join;
> foreach (member; __traits(allMembers, T)) {
> static assert (member in allMembers, "Member collision");
> allMembers[member] = true;
> }
> r ~= [__traits(allMembers, T)].join(",") ~ ",";
> }
> return r ~ " }";
> }());
> }
>
> It fails as
>
> enums.d(25,46): Error: static variable allMembers cannot be read at compile time
> enums.d(25,21): while evaluating: static assert("a" in allMembers)
>
> Is there a solution to this problem?
Move the AA declaration to inside the lambda, remove the 'static'
from the assert, and fix the condition ("member !in allMembers"), then
it will work.
artur
More information about the Digitalmars-d-learn
mailing list