[Issue 11247] Error: typeof(i).sizeof is used as a type

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Oct 13 14:20:48 PDT 2013


http://d.puremagic.com/issues/show_bug.cgi?id=11247



--- Comment #2 from monarchdodra at gmail.com 2013-10-13 14:20:47 PDT ---
(In reply to comment #1)
> (In reply to comment #0)
> > Not sure what to make of this:
> > 
> > //----
> > void main()
> > {
> >     int i;
> > 
> >     //This is OK:
> >     enum N = typeof(i).sizeof;
> >     byte[N] a;
> > 
> >     //This is also OK:
> >     byte[int.sizeof] b;
> > 
> >     //This errors out
> >     byte[typeof(i).sizeof] b;
> > }
> > //----
> > Error: typeof(i).sizeof is used as a type
> > //----
> > 
> > I *think* the compiler thinks I'm declaring an AA (When I want a SA) ?
> 
> Of course you are declaring AA here because D does not support variable arrays
> like C.

sizeof is a compile time constant though... so it's not a variable size array.
EG:
byte[int.sizeof] b;
static sized array.

> Sizeof property in this context is treated as type, not expression

Why?
byte[int.sizeof] b;
Here, it's treated correctly. it's the "typeof" that is throwing it off.

> that's why sizeof yileds ulong, not 4.

sizeof can yield a *type*? That's news to me.

> If you wanted to have static array here, then this is invalid report. However,
> if you want this to compile as AA array, than this is really rejects-valid. On
> the other hand, this is useless - in such cases Foo[bar.sizeof] always yileds
> Foo[ulong].

I *really* don't understand how:
byte[int.sizeof] b;
byte[typeof(i).sizeof] c;
Could have two different behaviors...

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list