少し見ない間に変わってました。
enum ctfe;
// ["ctfe"] int a; 以前のUDA
@ctfe int a; // 現在のUDA
@propertyや@safe、@trustedと同じ感じの記法になっています。 Javaのアノテーションに近いですね。 文字通り@ctfeと書くことができます。
UDAを使って、とりあえず適当にコードを書いてみます。
@(int.init)
typeof(__traits(getAttributes, f)[0]) f()
{
return __traits(getAttributes, f)[0];
}
上のコードでは、UDAに関数の戻り値の型を委ねてます。 これまでは、戻り値の型や引数の型といったもの以外の情報を、関数に持たせることができませんでしたが UDAによって可能になります。 ctpgでは、UDAでパーサに結果型の情報を付加できそうです。実装してみます。
担当:美馬(__traitsに、あるシンボルが宣言された場所のファイル名と行数を取得するものが欲しい・・・)