diff options
| author | Eugen Wissner <belka@caraus.de> | 2018-09-15 06:06:17 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2018-09-15 06:06:17 +0200 |
| commit | e5569e5feafdc2ca4b7f33471c9073a9645cf670 (patch) | |
| tree | 8d94c86276e2439cdc359141b40e73ef0a01df7c | |
| parent | b831a05407aaac5f834c6a604b7323ab06ffa70f (diff) | |
| download | tanya-e5569e5feafdc2ca4b7f33471c9073a9645cf670.tar.gz | |
meta.trait.EnumMembers: Fix one-member enums
Produce a tuple for an enum with only one member.
| -rw-r--r-- | source/tanya/meta/trait.d | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/source/tanya/meta/trait.d b/source/tanya/meta/trait.d index e4754b2..81b2127 100644 --- a/source/tanya/meta/trait.d +++ b/source/tanya/meta/trait.d @@ -1601,7 +1601,7 @@ if (is(T == class) || is(T == struct) || is(T == union)) } /// -pure nothrow @safe unittest +@nogc pure nothrow @safe unittest { static struct S { @@ -2613,14 +2613,23 @@ if (is(T == enum)) } else { - alias getEnumMembers = AliasSeq!(__traits(getMember, T, Args[0]), getEnumMembers!(Args[1 .. $])); + alias getEnumMembers = AliasSeq!(__traits(getMember, T, Args[0]), + getEnumMembers!(Args[1 .. $])); } } - alias EnumMembers = getEnumMembers!(__traits(allMembers, T)); + private alias allMembers = AliasSeq!(__traits(allMembers, T)); + static if (allMembers.length == 1) + { + alias EnumMembers = AliasSeq!(__traits(getMember, T, allMembers)); + } + else + { + alias EnumMembers = getEnumMembers!allMembers; + } } /// -pure nothrow @nogc @safe unittest +@nogc nothrow pure @safe unittest { enum E : int { @@ -2628,7 +2637,17 @@ pure nothrow @nogc @safe unittest two, three, } - static assert([E.one, E.two, E.three] == [ EnumMembers!E ]); + static assert([EnumMembers!E] == [E.one, E.two, E.three]); +} + +// Produces a tuple for an enum with only one member +@nogc nothrow pure @safe unittest +{ + enum E : int + { + one = 0, + } + static assert(EnumMembers!E == AliasSeq!0); } /** |
