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
Array literals of char type, have completely different
literals. In module scope:
char x = ['a']; // OK -- array literals can have an
char y = "b"; // illegal
A second difference is that string literals have a trailing
for compatibility with C, but is barely mentioned in the
not state if the trailing \0 is still present after
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.
assignment is legal (but kind of unsafe actually, if you ever
Yes it's legal. In my view it is a design mistake in the
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 think ALL my comments were wrong.
In that case, you are right, since:
char x = "a".dup;
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.