immutable bug?
Steven Schveighoffer
schveiguy at yahoo.com
Wed Jan 25 11:44:32 PST 2012
On Wed, 25 Jan 2012 10:46:57 -0500, Era Scarecrow <rtcvb32 at yahoo.com>
wrote:
> DMD 2.057 - Windows version
>
> I'm in the middle of converting a medium sized project from C to D.
> While I'm doing that I have several static data structures. Here's where
> I find myself. Can't probably duplicate the error message without the
> full sources.
>
> Since immutable is transitive, this should not cause an error. But I am
> getting this one, which repeats 4 times for all four Notepart entries:
>
> Error: cannot implicitly convert expression ("fQuality") of type string
> to char[]
>
> //for reference on types
> const nLen = 4;
> enum ValueType {}
> struct Flags {}
>
> alias NotePart NP;
> alias ValueType VT;
>
> struct NotePart {
> ValueType type;
> char[] id;
> Flags flags;
> int _size;
> }
>
> struct SubRecordParts {
> char name[nLen];
> char requ[nLen];
> int size;
> NotePart[] notes;
> int identifyBy = -1;
> }
>
> //immutable should (i think) implicitly change char[] to
> immutable(char[])
> immutable SubRecordParts subParts[] = [
> {"AADT", "", 16, [
> NP(VT.ranged_32, "IApparatus"),
> NP(VT.float_32, "fQuality"),
> NP(VT.float_32, "fWeight"),
> NP(VT.i_32, "iuses")]}
> ];
Your issue is here, (I'm guessing). If do this (after slimming down to a
compilable sample):
alias immutable(NotePart) NP;
then it compiles.
Because the expression (guessing that you have NP aliased to NotePart)
NP(...) is constructing a NotePart and not an *immutable* NotePart, it
cannot resolve that part of the expression, even though the whole
expression is treated as immutable after evaluation.
Maybe there's an enhancement lurking in here...
-Steve
More information about the Digitalmars-d-learn
mailing list