ヨーキョクデイ

いろいろ雑食

続・std.stdio の write 系関数と invariant(char) / immutable(char)

std.stdio の write 系関数と invariant(char) / immutable(char) - ヨーキョクデイ の続き。
DMD 2.029 では某氏の尽力により Phobos が若干すごいことになった。その結果、std.stdio の write 系関数に invariant(char) や immutable(char) を渡すと、それが表す文字ではなくその文字の ASCII コードが表示される件が解消された模様。

import std.stdio;

void main(){
    char a = 'a';
    const(char) b = 'b';
    invariant(char) c = 'c';
    immutable(char) d = 'd';

    writeln(a, b, c, d);
    // writefln(a, b, c, d);  // 2.029 から第 1 引数は文字列専用
    writefln("%s%s%s%s", a, b, c, d);

    string s = "abcd";
    foreach(e; s){
        // 型推論で e は immutable(char)
        write(e);
    }
    writeln();
    foreach(char e; s){
        write(e);
    }
    writeln();
}

この出力結果は期待通りに次のようになる。

abcd
abcd
abcd
abcd

うれしい。