On Friday, 14 September 2012 at 15:00:29 UTC, Don Clugston wrote:
On 14/09/12 14:50, monarch_dodra wrote:
On Friday, 14 September 2012 at 11:28:04 UTC, Don wrote:
--- Comment #0 from Don <clugd...@yahoo.com.au> 2012-09-14 04:28:17
PDT ---
Array literals of char type, have completely different semantics from
literals. In module scope:

char[] x = ['a']; // OK -- array literals can have an implicit .dup
char[] y = "b";    // illegal

A second difference is that string literals have a trailing \0. It's
for compatibility with C, but is barely mentioned in the spec. The
spec does
not state if the trailing \0 is still present after operations like

I think this is the normal behavior actually. When you write "char[] x = ['a'];", you are not actually "newing" (or "dup"-ing) any data. You are
just letting x point to a stack allocated array of chars.

I don't think you've looked at the compiler source code...
The dup is in e2ir.c:4820.

So the
assignment is legal (but kind of unsafe actually, if you ever leak x).

Yes it's legal. In my view it is a design mistake in the language.
The issue now is how to minimize the damage from it.

Thank you for taking the time to educate me. I still have a bit of trouble with static vs dynamic array initializations: Things don't work quite as in C++, which is confusing me. I'll need to study a bit harder how array initializations work. Good news is I'm learning.

I think ALL my comments were wrong.

In that case, you are right, since:
char[] x = "a".dup;
Is legal.

Good point. For anybody reading though, the actual code example should be
enum char[] x = foo(true);   // ok
enum char[] y = foo(false);  // rejected!

No it should not.
The code example was correct. These are static variables.

I hadn't thought of static variables: I placed your code in a main, and both produced a compilation error. The enums reproduced the issue for me however.

I think this would work with my "m" suggestion

Not necessary. This is only a question about what happens with the compiler internals.


Reply via email to