さて、あなたのユースケースがどのように見えるかを考えると、あなたはそれについて間違っています。あなたは本当にもっと似たようなことをするべきです
version(A)
{
immutable int var = 1;
}
else version(B)
{
immutable int var = 2;
}
else
{
immutable int var = 3;
}
ただし、一般的なケースでは、シンボルが存在するかどうかを特にテストする場合は、テスト対象のシンボルの名前であるis(typeof(symbol))
where is を使用します。symbol
したがって、変数var
が存在するかどうかをテストしたい場合は、次のようにします。
static if(is(typeof(var)))
{
//var exists
}
もちろん、それが存在しないことをテストするには、条件を否定します。
static if(!is(typeof(var)))
{
//var does not exist
}
typeof(exp)
式の型を取得し、式が無効な場合 (変数が存在しないか、式内の関数がそれらの引数で機能しないなどの理由で)、結果はvoid
です。is(type)
型が non- かどうかをチェックしますvoid
。したがって、is(typeof(exp))
exp が有効な式であるかどうかをテストし、それが単なるシンボル名である場合は、それが有効なシンボルであるかどうかをテストしていることを意味します。