On 12.08.2010 16:19, Steven Schveighoffer wrote:
On Thu, 12 Aug 2010 09:56:07 -0400, simendsjo
<simen.end...@pandavre.com> wrote:

On 12.08.2010 15:30, Steven Schveighoffer wrote:
On Thu, 12 Aug 2010 09:13:54 -0400, simendsjo
<simen.end...@pandavre.com> wrote:

The spec doesn't mention anything about block statements in typeof
declarations.

//typeof({1}) a; // found } expecting ;
//typeof({1}()) b; // same as a
typeof(1) c; // int

{...} is a function literal, a lambda function if you will.

I thought parameterless delegates were written () {}..

Your lambda function contains a syntax error, the single line in it does
not end in a semicolon.

Of course, if you made it:

{1;}

I think it might fail anyways, because 1; is not a statement.

Why doesn't this work then?
typeof({return 1;}()) a; // found 'a' when expecting ';' following
statement

First, this compiles for me. Not sure why it doesn't for you.

Second, stringof is your friend. Coupled with pragma(msg, ...) It allows
you to "view" the type of an expression at compile time:

pragma(msg, typeof({return 1;}()).stringof);

Which when compiled on dmd 2.047 linux, prints:

int


Tested with dmd 2.048 on win7.

pragma(msg, "module:"~typeof({return 1;}()).stringof);

void main()
{
        pragma(msg, "main:"~typeof({return 1;}()).stringof);
//typeof({return 1;}()) a; // found 'a' when expecting ';' following statement
}

prints
module:int
main:int



I see a syntax error there, r.popFront is not a property, so it should
look like this:

r.popFront();

It only works right now because mandatory () for non-properties is not
implemented in the compiler yet.

So once this is implemented, this template is always false?

Once mandatory parens for non-properties is implemented, the code will
be changed to r.popFront();

-Steve

Reply via email to