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);
}