【一人 C++20 Advent Calendar 2019】consteval 指定子を追加【14日目】

一人 C++20 Advent Calendar 2019 14日目の記事になります。

consteval 指定子を追加

consteval とは即時関数を示す為の指定子です。
即時関数とはその関数の呼び出しがコンパイル時定数式を生成しなければならないことを指します。

// コンパイル時に定数を定義する時のみ呼べる
consteval int
sqr(int n) {
    return n * n;
}

// OK: コンパイル時定数になる
constexpr int n1 = sqr(4);
static_assert(n1 == 16);

int n2 = 3;
// NG: コンパイル時定数にならない
int n3 = sqr(n2);

constexprコンパイル時、実行時どちらかも呼べますが constevalコンパイル時にのみ呼び出せる、って感じですかね。
いまいちユースケースが思いつかないんですがどういう時に利用するんですかね。
consteval を利用することで実行時ではなくてコンパイル時に処理することを明示化するとかなのかな…。

参照