On Thursday, 24 March 2016 at 21:26:00 UTC, Jack Stouffer wrote:
void someFunc(N)(N val) if (isNumeric!N)
{
    int b = val;
}

void main()
{
    import std.typecons;
    Nullable!int a = 42;

    someFunc(a);
}

Basicly you need to test if param is a Nullable and if it is get the
template param first param.
The FirstTemplateParamMatches template is more psuedo code.
Maybe there is a nicer way to get the first template param.

void someFunc(N)(N val)
   if(isInstanceOf!(Nullable, N)
&& FirstTemplateParamMatches!(isNumeric, N)|| isNumeric!(N))
{}

template TemplateParamMatches(alias C, T)
{
     enum TemplateParamMatches =
C(mixin("fullyQualifiedName!(T).split(\"!(\").split(\")\")"));
}


But if you want to use several functions you can do some template overloading.
Then one for Nullable which simply forwards the function.

void someFunc(N)(Nullable!N val)
    if(isNumeric!(N))
{
    someFunc(val.get);
}

Reply via email to