// Without Alias this would fail if Args[0] were e.g. a value and // some logic would be needed to detect when to use enum instead. alias Head(Args...) = Alias!(Args[0]); alias Tail(Args...) = Args[1 .. $]; alias Blah = AliasSeq!(3, int, "hello"); static assert(Head!Blah == 3); static assert(is(Head!(Tail!Blah) == int)); static assert((Tail!Blah)[1] == "hello");
{
alias a = Alias!123;
static assert(a == 123);
}
{
enum e = 1;
alias a = Alias!e;
static assert(a == 1);
}
{
alias a = Alias!(3 + 4);
static assert(a == 7);
}
{
alias concat = (s0, s1) => s0 ~ s1;
alias a = Alias!(concat("Hello", " World!"));
static assert(a == "Hello World!");
}
{
alias A = Alias!int;
static assert(is(A == int));
}
{
alias A = Alias!(AliasSeq!int);
static assert(!is(typeof(A[0]))); // An Alias is not an AliasSeq.
static assert(is(A == int));
}
{
auto i = 6;
alias a = Alias!i;
++a;
assert(i == 7);
}To alias more than one thing at once, use AliasSeq.
Allows aliasing of any single symbol, type or compile-time expression.
Not everything can be directly aliased. An alias cannot be declared of - for example - a literal:
With this template any single entity can be aliased: