Nothrow std.conv.to with explicit default value

Per Nordlöw per.nordlow at gmail.com
Thu Jun 21 10:40:09 UTC 2018


On Wednesday, 20 June 2018 at 14:39:48 UTC, Per Nordlöw wrote:
> Is there a way to avoid compile-time-string-concat plus mixin 
> here?

Using __traits(getMember, ...) should compile faster, right?

T toDefaulted(T)(scope const(char)[] value, T defaultValue) @safe 
pure nothrow @nogc
if (is(T == enum))
{
     // doesn't need `std.conv.to`
     switch (value)
     {
         static foreach (member; __traits(allMembers, T)) // 
prevents call to slower `EnumMembers`
         {
         case member:
             return __traits(getMember, T, member); // NOTE this 
is slower: mixin(`return T.` ~ member ~ `;`);
         }
     default:
         return defaultValue;
     }
}



More information about the Digitalmars-d-learn mailing list