【D言語】__LINE__と__FILE__の挙動を修正するPullReq

以前、テンプレート引数として使われるLINEFILEがバグっぽい挙動をするという記事を書きました。

http://codelogy.org/?p=471

が、つい最近、それを修正するPull Requestが来ました。

https://github.com/D-Programming-Language/dmd/pull/2617


ドキュメントによると、テンプレート引数のデフォルト値として使われるLINEFILEは、インスタンス化された場所の値になります。今までは、インスタンス化された場所ではなく使用された場所の値になっていました。


module main;

template T(int line = __LINE__) // 3行目で__LINE__を使用
{
    // インスタンス化された行数ではなく、__LINE__が使用された行数になってる!!
    static assert(line == 3); 
    int i;
}

void main()
{
    T!().i = 5; // 12行目でTをインスタンス化
}

この挙動が修正されると、呼び出し元の行数が必要で、仕方なく文字列mixinを使っていた場所で、template mixinが使いやすくなります。ctpgでも、文字列mixinではなくtemplate mixinのインターフェースを提供できるようになります。便利ですね。

次:http://codelogy.org/?p=977

担当:美馬(ctpgを使ったパーサ生成がちょっと書きやすくなる!)