- GCC 15はC++26機能を多数追加し、一部のC++23機能も改善
- 主な追加機能は Pack Indexing、Variadic Friends、削除理由の明示、構造化束縛の条件文 など
- 新しいコンパイラオプションや警告も導入され、開発者体験が向上
- C++モジュールのサポートが強化され、テンプレートのコンパイル速度最適化も行われた
- GCC 15はFedora 42のデフォルトコンパイラとして採用され、まもなくRed Hat GCC Toolsetでも提供予定
GCC 15の新しいC++機能
- GCC 15.1は2025年4月25日にリリースされ、C++26機能を本格的に導入
- 依然としてデフォルト標準は
gnu++17 で、-std=c++23、-std=c++26 などで最新機能を有効化可能
- C++20、C++23、C++26機能はまだ 実験的(experimental)
C++26の主な機能
-
Pack Indexing
- Variadic Template引数の特定要素に
pack...[N] 構文で直接アクセス可能
- 反復のトリックなしに、最初の引数などをすっきり参照できる
-
Structured Bindingsの属性指定
- 構造化束縛された各変数に個別に
[[attribute]] を適用可能
- 例えば、特定の束縛変数だけを
[[deprecated]] にできる
-
削除関数に説明を追加
= delete("理由") 構文で、削除された関数の呼び出しエラーに メッセージ を提供できる
-
Variadic Friends
- テンプレートクラスで複数の型をまとめて
friend 宣言可能
- Passkeyパターン のようにアクセス制御の強化に有用
-
constexpr Placement New
std::allocator とplacement newをconstexprコンテキストで使用可能
-
構造化束縛を条件文で使用
if、while、switch の条件文内で構造化束縛を宣言可能
- 条件判定はコンパイラが生成した内部変数によって行われる
-
不完全型の削除禁止
delete や delete[] が不完全型に対して使われた場合、C++26モードではコンパイルエラーになる
-
オックスフォードカンマ警告
- Variadic関数宣言時に
, ... なしで ... だけを使うパターンをC++26で警告
-
配列比較の削除
- 配列同士を
== で比較するコードをエラーとして扱う
- 従来のC++20では警告だったが、今後はC++26モードでコンパイルエラーに格上げ
-
#embed ディレクティブ
- バイナリデータをソースコードに直接埋め込める
#embed をサポート
まだコメントはありません。