読者です 読者をやめる 読者になる 読者になる

【D言語】assert(false)について

D言語

基本的に、-releaseでコンパイルすると、assert式は消えます。 が、assert(false)やassert(0)など、コンパイル時に絶対に失敗するとわかるassertは、-releaseを付けても消えません。


bool f(){ return false; }
template t(){ enum t = false; }

void main()
{
    // -releaseで消えるもの
    assert(1); // 明らかに成功する
    assert(f()); // コンパイル時には失敗が分からない
    // その他普通のassert

    // -releaseで消えないもの
    assert(false); // 明らかに失敗する
    assert(0); // ditto
    assert(t!()); // コンパイル時に失敗がわかる
}

assert(false)は、-releaseを付けなければ普通にAssertErrorを投げますが、 -releaseがつくと、プログラムを強制終了させます。

プログラムが絶対にたどり着かないような所で使うと良さそうですね。

担当:美馬(TDPLの日本語版が出た!!)