On Monday, 18 June 2018 at 20:48:55 UTC, Per Nordlöw wrote:
T toDefaulted(T, S, U)(S value, /*lazy*/ U defaultValue)
if (is(typeof(() { T r = defaultValue; }))) // TODO use std.traits.isAssignable!(T, U) ?

why not just make it

T toDefaulted(T, S)(S value, T defaultValue)

and forget U entirely?

The problem with this code is that throwing exceptions for the default case is costly at least with dmd. Is there another way to do this?

It depends on what the types are. If it is like string to int, you can simply scan the string for the appropriate format.

For other conversions though, I don't think you can tell in general. User-defined types might not even tell you except by exception.

Reply via email to