On Tue, 02 Jul 2013 12:33:14 +0100, Michal Minich
<michal.min...@gmail.com> wrote:
On Tuesday, 2 July 2013 at 11:29:05 UTC, Dicebot wrote:
On Tuesday, 2 July 2013 at 11:26:59 UTC, Michal Minich wrote:
But ... I'm asking only about implicit conversion of string literal,
not arbitrary expressions of string type.
char[] str = "abc".dup;
Thanks, that is workaround I didn't know about.
I'm really interested about reasons why it doesn't works (without
dup/cast). At some point it had to be disabled. But I really cannot find
a reason why that would be useful.
It is done for performance reasons. On UNIX the compiler will put the
literal "abc" into read only memory. It could/should do the same on
windows but doesn't yet (I believe).
So, the compiler is treating them as such, by giving them the type
immutable(char)[] (AKA string).
And, the spec should, if it doesn't, define string literals to be
immutable.
In older versions of DMD we didn't have string AKA immutable(char), in
fact at one point we didn't have immutable at all. At that time, "abc"
was typed as char[] and people on UNIX systems ran headlong into an access
violation attempting to write to ROM :p
R
--
Using Opera's revolutionary email client: http://www.opera.com/mail/