www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Aliasing lambdas

reply "Peter Alexander" <peter.alexander.au gmail.com> writes:
Is there any reason why this isn't allowed:

alias f = (x => x);

but this is:

template A(alias B) { alias A = B; }
alias f = A!(x => x);

???
Jan 13 2013
parent reply Timon Gehr <timon.gehr gmx.ch> writes:
On 01/13/2013 08:55 PM, Peter Alexander wrote:
 Is there any reason why this isn't allowed:

 alias f = (x => x);

 but this is:

 template A(alias B) { alias A = B; }
 alias f = A!(x => x);

 ???
No. It is a gratuitous grammar limitation.
Jan 13 2013
parent reply Philippe Sigaud <philippe.sigaud gmail.com> writes:
On Sun, Jan 13, 2013 at 9:07 PM, Timon Gehr <timon.gehr gmx.ch> wrote:
 On 01/13/2013 08:55 PM, Peter Alexander wrote:
 Is there any reason why this isn't allowed:

 alias f = (x => x);

 but this is:

 template A(alias B) { alias A = B; }
 alias f = A!(x => x);

 ???
No. It is a gratuitous grammar limitation.
The same limitation forbids: alias __traits(whatever, ...) result; The grammar says: AliasDeclaration: alias BasicType Declarator (and others, but this is the one limiting you). BasicType should be replaced by PrimaryExrpession, or something like that.
Jan 13 2013
parent Timon Gehr <timon.gehr gmx.ch> writes:
On 01/13/2013 09:38 PM, Philippe Sigaud wrote:
 On Sun, Jan 13, 2013 at 9:07 PM, Timon Gehr <timon.gehr gmx.ch> wrote:
 On 01/13/2013 08:55 PM, Peter Alexander wrote:
 Is there any reason why this isn't allowed:

 alias f = (x => x);

 but this is:

 template A(alias B) { alias A = B; }
 alias f = A!(x => x);

 ???
No. It is a gratuitous grammar limitation.
The same limitation forbids: alias __traits(whatever, ...) result; The grammar says: AliasDeclaration: alias BasicType Declarator (and others, but this is the one limiting you). BasicType should be replaced by PrimaryExrpession, or something like that.
I think it should be roughly: alias TemplateArgument Identifier; alias Identifier=TemplateArgument; Note: The current grammar allows alias int x = 2; Which does not make any sense.
Jan 13 2013