Have anyone tried to implement a variant of `std.conv.to` that can be `nothrow @nogc` if the exception handling is replaced by an extra second parameter (`defaultValue`) returned iff the call to `to` throws?

I currently have a solution

https://github.com/nordlow/phobos-next/blob/b7a5c589d890f6b7bef7c5f2588fa93d90d19d62/src/conv_ex.d#L10

that is `nothrow` but not (yet) `@nogc`:


CommonType!(T, U) toWithDefault(T, U, S)(S value, U defaultValue)
    if (haveCommonType!(T, U))
{
    try
    {
        import std.conv : to;
        return value.to!T;
    }
catch (Exception e) // assume ConvException. TODO can we capture ConvException instead make it inferred nothrow
    {
        return defaultValue;
    }
}

Is there any way I can make it `@nogc` without having to modify the code in `std.conv`?

Further, can anybody think of a more consice naming than `toWithDefault`?

Reply via email to