import std.stdio;
import std.utf;

void main()
{
    {
        string a = "hello";
        string b = a;           // Переменная b теперь тоже указывает на значение "hello"
        string c = b[0 .. 4];   // Переменная c указывает на строку "hell"
                                // Если бы такое присваивание было разрешено, это изменило бы a, b, и c:
                                // a[0] = 'H';
                                // Конкатенация оставляет переменные b и c нетронутыми:
        a = 'H' ~ a[stride(a, 0) .. $];
        assert(a == "Hello" && b == "hello" && c == "hell");
    }

    {
        string a = "Независимо от представления \u03bb стоит \u20AC20.";
        wstring b = "Независимо от представления \u03bb стоит \u20AC20.";
        dstring c = "Независимо от представления \u03bb стоит \u20AC20.";
        writeln(a, '\n', b, '\n', c);
    }
}
