概要
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ラベルを置ける場所についての非互換がなくなる。