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

履歴 編集

複合文の末尾へのラベルを許可(C++23)

概要

C言語 (C20) との互換性のため、C言語で許可されていた複合文の末尾 (関数末尾など{}ブロックの末尾) へのgotoラベルを許可する。

関数末尾の例:

void foo(void)
{
first:  // C20:OK C++:OK
  int x;
second: // C20:OK C++:OK
  x = 1;
last:   // C20:OK C++23:OK
}

この機能が必要になった背景・経緯

CではN2508の提案により、宣言の前など、複合文のあらゆる箇所にgotoラベルを置けるようになり、C++との互換性が改善した。C++では宣言は文として扱われるため宣言の前には以前からgotoラベルを置くことができた。ただし、C++では複合文の末尾にはgotoラベルを置けないという非互換が残っていた。

C++23でこの機能を導入することにより、gotoラベルを置ける場所についての非互換がなくなる。

参照