digitalmars.D.bugs - [Issue 11247] New: Error: typeof(i).sizeof is used as a type
- d-bugmail puremagic.com (36/36) Oct 13 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11247
- d-bugmail puremagic.com (17/39) Oct 13 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11247
- d-bugmail puremagic.com (18/50) Oct 13 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11247
- d-bugmail puremagic.com (8/60) Oct 13 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11247
http://d.puremagic.com/issues/show_bug.cgi?id=11247 Summary: Error: typeof(i).sizeof is used as a type Product: D Version: unspecified Platform: All OS/Version: All Status: NEW Keywords: rejects-valid Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: monarchdodra gmail.com 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) ? FYIW, in 2.062 and prior, the error message is: Error: cannot resolve .property for typeof(i).sizeof -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 13 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11247 Maxim Fomin <maxim maxim-fomin.ru> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |maxim maxim-fomin.ru ---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 property in this context is treated as type, not expression - that's why sizeof yileds ulong, not 4. 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]. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 13 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11247sizeof is a compile time constant though... so it's not a variable size array. EG: byte[int.sizeof] b; static sized array.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 property in this context is treated as type, not expressionWhy? 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: -------
Oct 13 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11247 ---It looks like it is undocumented whether sizeof should yield ulong or 4 here.sizeof is a compile time constant though... so it's not a variable size array. EG: byte[int.sizeof] b; static sized array.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 property in this context is treated as type, not expressionWhy? byte[int.sizeof] b; Here, it's treated correctly. it's the "typeof" that is throwing it off.Yes, they should be same. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------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...
Oct 13 2013