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

履歴 編集

#lineディレクティブの制約を現実の実装に合わせて緩和する [P4136R2](C++26)

このページはC++26に採用される見込みの言語機能の変更を解説しています。

のちのC++規格でさらに変更される場合があるため関連項目を参照してください。

概要

#lineディレクティブは、後続のソース行の行番号を指定する。

#line 100 "foo.cpp"
// 以降の行は、ファイル名"foo.cpp"の100行目から始まるものとして扱われる

C++26より前までは、行番号として0もしくは2147483647より大きい値を指定することが不適格と規定されていたが、これは現実の実装の振る舞いと合致していなかった。

C++26では、[1, 2147483647]の範囲外の行番号指定を、不適格ではなく「条件付きサポート (conditionally-supported)」とする。条件付きサポートとは、その指定を実装がサポートするかどうかが実装定義であり、サポートしない場合は診断 (コンパイルエラー) が必要となる、ことを意味する。

#line 0          // 条件付きサポート (C++26より前では不適格)
#line 2147483648 // 条件付きサポート (C++26より前では不適格)

現実のコンパイラ実装の動作に合わせ、そのような仕様とする。

関連項目

参照