C++ではconstというキーワードが存在する。
定数を作るアレなのだが少しややこしいことが起きた。
例えば以下のコードは
通るconst int a = 1;
static_assert(a,"");
int main()
{
}
一方で以下のコードは
通らないint func(){return 1;}
const int a = func();
static_assert(a,"");
int main()
{
}
何が違うのかというと前者は初期化でリテラルを渡していたのに対し後者は関数の返り値で初期化している。このとき前者ではコンパイル時定数だが後者は実行時定数となる。わけがわからない。
後者は実行時に評価されるからいいとして前者はホントにどういうことなのか。
まぁコンパイル時定数になってくれないとTMPは成立しないから別にいいのだが。
PR