Существует две основные версии языка D. Как правило, они несовместимы друг с другом, хотя код может быть записан для компиляции в обоих.
D1 - это то, во что, похоже, написан код, который вы ввели. Он не имеет понятия неизменяемых массивов, следовательно, это работает.
D2 - это то, чем вы пытаетесь его скомпилировать, отсюда 2 начинается с номера версии компилятора. Одна из основных особенностей D2 - это концепция постоянных и неизменных / инвариантных ссылок на данные.
char[] text; // mutable data
const(char)[] ctext; // data may be mutable or immutable - but either way,
// it will not be changed through this reference
invariant(char)[] itext; // immutable data
Строковые литералы в D2 классифицируются как неизменяемые данные и, следовательно, не могут быть присвоены символу [], а только const(char)[]
или invariant(char)[]
(или эквивалентам wchar или dchar).
string
- это псевдоним invariant(char)[]
, который вы можете использовать либо для удобства, либо для совместимости с D1.