Using a string generated at compile-time in a @nogc function
Mithun Hunsur via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun May 1 06:22:27 PDT 2016
On Sunday, 1 May 2016 at 10:37:23 UTC, Anonymouse wrote:
> On Sunday, 1 May 2016 at 05:28:36 UTC, Mithun Hunsur wrote:
>> Hi all,
>>
>> I'm working on removing the string mixins from my code, but
>> have run into an issue:
>>
>> http://dpaste.dzfl.pl/ecd7eb53947e
>>
>> As far as I can tell, this should work; the enum should force
>> compile-time execution (which it does, as evidenced by the
>> pragma). [...]
>
> That does seem buggy but I don't know enough to say for
> certain. I'd suggest filing a bug report anyway; the worst
> thing that can happen is that it gets closed. Unreported bugs
> can only be fixed by accident.
>
> Tacking an .idup after .toLower seems to make it work, at least
> on dpaste (http://dpaste.dzfl.pl/8abed3d3ec6c). I would have
> thought both toLower and idup returned a normal string, but
> unsure.
>
>> enum loweredName = member.to!string.toLower.idup;
>> pragma(msg, loweredName);
>>
>> if (member == test)
>> return loweredName;
Yup - that works. How odd! Along the same lines is
enum loweredName = "" ~ member.to!string.toLower;
which also works without issues. This makes me think that the
result of `member.to!string.toLower` isn't being treated as a
string, despite being typed as one - and by using `idup` or
concatenating to it, we essentially retype it as a string.
More information about the Digitalmars-d-learn
mailing list