謎's キッチン

謎のひとりごと。Amazon欲しい物リストはこちら: https://www.amazon.co.jp/hz/wishlist/ls/CCPOV7C6JTD2

template使いにくすぎる件

可変長引数で渡せばテンプレートに何でも渡せるが、色々と不都合が多すぎるのがなんとも。

static if(arr)

とするとarrが[1]の時などにエラーが起きる。

static if(!!arr)

static if(arr.length)

とするとarrがnullの時にエラーが起きる。しかも、以下に引っかからない。

static if(arr!=null)
static if(is(typeof(arr.length)))

どないせいと。脳みそこねても分からん俺。
null.lengthは0返しゃいいし、!!nullはfalse返せよと。

bool isNull(T)(T t){
  if(t.length)
    return false;
  return true;
}

static if(isNull(arr))

としてもおかしい。この状態でarrをintからcharに変更したら直った。何だそりゃ。
他にもarr[0..len][1..$-1]とか駄目だし、[] ~ 1が駄目だし、TL.length>0?TL[0]:0が駄目だし、enumが駄目だし。
重複チェック面倒なので、落ち着いてからバグ報告する予定。なのでここにメモっとく。
あーforeach(;tuple)な関数のCTFEも駄目だっけ。
#この周りはバグだらけなのでBOFでは喋る予定なす。