最終更新日時(UTC):
が更新

履歴 編集

function
<utility>

std::unreachable(C++23)

namespace std {
  [[noreturn]] void unreachable();
}

概要

コード実行が本関数に到達しないことを表明する。

事前条件

false==true

備考

std::unreachable関数の事前条件は決して満たされない(恒偽式)ため、関数呼び出しは常に未定義の動作を引き起こす。 C++コンパイラはこの情報を利用し、std::unreachable呼び出しを含まないコードパスのみが実行されうると仮定して、より高速に動作するプログラムを生成する可能性がある。

#include <iostream>
#include <utility>

int flip(int x)
{
  switch (x) {
  case 0:
    return 1;
  case 1:
    return 0;
  default:
    // C++コンパイラは引数 x が値0,1以外を取らないと
    // 仮定したコード生成を行う可能性がある。
    std::unreachable();
  }
}

int main()
{
  std::cout << flip(0) << std::endl;
  std::cout << flip(1) << std::endl;
  // 例えば f(2) 呼び出しは未定義動作となる。
}

出力

1
0

バージョン

言語

  • C++23

処理系

関連項目

参照