Ali Çehreli:
However, that is a confusing syntax because the right-hand side
is not the same type as the elements, which is dchar[3].
Perhaps D supports it for C compatibility?
It doesn't match the following. Here, the right-hand side is
the same as the element type:
int[2] arr2 = 42;
assert(arr2 == [ 42, 42 ]);
But this doesn't compile:
char[3][5] arr = [ '.', '.', '.' ];
Error: mismatched array lengths, 15 and 3
I see that as a bug but can't be sure.
In D char literals as 'x' or even string literals as "xx" are
seen as instances of all the types of strings and chars, it's not
a bug, it's a feature:
void main() {
char x1 = 'x';
wchar x2 = 'x';
dchar x3 = 'x';
string s1 = "xx";
wstring s2 = "xx";
dstring s3 = "xx";
}
There is a way to specify the type of a string, so this gives
errors:
void main() {
string s1 = "xx"d;
string s2 = "xx"w;
wstring s3 = "xx"d;
}
Bye,
bearophile