概要
GCC 16.1が2026年4月30日に正式リリースされた。今回のメジャーリリースで最も影響の大きい変更は、C++コンパイルのデフォルト言語標準がGNU++17からGNU++20へ引き上げられたことだ。これにより、-std=オプションを明示せずにコンパイルした場合、C++20の機能セットが自動的に適用される。既存のコードベースでC++17以前の動作に依存している場合は、-std=gnu++17などのオプション指定か、コード側の修正が必要になる。
C++26の先進機能についても実験的サポートが追加されており、リフレクション(Reflection)・契約システム(Contracts)・構造化バインディングの拡張・constexpr例外処理など、次世代標準の機能を先行して試せる環境が整った。
エラーメッセージと診断機能の大幅改善
GCC 16では、開発者体験を向上させる診断機能の強化が目立つ。これまで実験的オプションとして提供されていた階層的エラーメッセージ表示がデフォルト動作となった。テンプレートを多用するC++コードでよく発生する複雑なエラーが、インデントと箇条書きによるネスト構造で表示されるようになり、問題箇所の特定が格段に容易になった。従来の表示形式に戻す場合は-fno-diagnostics-show-nestingオプションを使用できる。
診断出力の形式も拡充されており、実験的機能としてHTML形式の出力(-fdiagnostics-add-output=experimental-html)が追加された。ブラウザで視覚的に制御フローや状態遷移を確認できるため、静的解析器のデバッグ作業などで効果を発揮する。また、機械可読なJSON形式のSARIF出力も強化され、名前空間・クラスの階層関係を保持する論理的ロケーション構造や、例外処理・longjmpを含む制御フロー情報の表現が追加されてSARIF 2.2標準に対応した。
静的解析器とその他の変更
静的解析器(-fanalyzer)では、C++言語のサポートが進み、例外処理とNRVO(Named Return Value Optimization)への対応が加わった。内部データ構造であるsupergraphの再設計やメモリバッファ追跡の改善も行われ、Rangerとの統合による値の範囲追跡機能の活用も開始している。ただし、複雑なC++コードに対するスケーリング問題は依然として残存しており、本番環境での使用はまだ推奨されていない段階だ。
互換性に関しては、Solaris環境でint8_t等がsigned charとなりC99標準準拠となったものの、非互換変更として注意が必要だ。C++20デフォルト化とあわせて、既存プロジェクトをGCC 16に移行する際には事前の動作確認を推奨する。