On Friday, 2 August 2013 at 11:37:27 UTC, Bosak wrote:
I want to create a mixin template such that:
mixin template ArgNull(alias arg, string name)
{
if(arg is null)
throw new Exception(name~" cannot be null.");
}
But is there a way to do that with only one template argument.
And then use it like:
string text = null;
mixin ArgNull!(text);
And the above mixin to make:
if(text is null)
throw new Exception("text cannot be null.");
Note that template mixins cannot inject arbitrary code, they can
only inject declarations. You can use '__traits(identifier,
symbol)' on an alias parameter to retrieve the symbol name, for
example:
-----
mixin template ArgNull(alias arg)
{
void test()
{
if (arg is null)
throw new Exception(__traits(identifier, arg) ~ "
cannot be null.");
}
}
string text = null;
mixin ArgNull!text;
void main()
{
test();
}
-----