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
うれしい。