2.2.4. C++ 互換性

すべての -std モードの Red Hat Enterprise Linux バージョン 5、6、7、および Red Hat Developer Toolset バージョン 1 から 10 のすべてのコンパイラーは、C++98 モードの他のコンパイラーと互換性があります。

C++11、C++14、または C++17 モードのコンパイラーは、同じリリースシリーズであれば、同じモードでの別のコンパイラーとの互換性が保証されています。

サポートされる例:

  • Red Hat Developer Toolset 6.x からの C++11 および C++11
  • Red Hat Developer Toolset 6.x からの C++14 および C++14
  • Red Hat Developer Toolset 10.x からの C++17 および C++17
重要
  • Red Hat Developer Toolset 10.x の GCC コンパイラーは、C++20 を使用してコードを構築することは可能ですが、この機能は Red Hat では実験的で、サポートされていません。
  • 本セクションで説明されている互換性情報はすべて、GCC C++ コンパイラーの Red Hat が提供するバージョンにのみ関連します。

2.2.4.1. C++ ABI

-std=c++98 または -std=gnu++98 で Red Hat Developer Toolset ツールチェーンが明示的にビルドした C++98 準拠のバイナリーまたはライブラリーは、Red Hat Enterprise Linux 5、6、または 7 システム GCC が構築したバイナリーおよび共有ライブラリーと自由に混在できます。

Red Hat Developer Toolset のデフォルトの言語標準設定は、GNU 拡張との C++14 で、明示的に -std=gnu++14 を使用するオプションと同じです。

Red Hat Developer Toolset では、それぞれのフラグでコンパイルされたすべての C++ オブジェクトが Red Hat Developer Toolset 6 以降を使用してビルドされている場合、C++14 言語バージョンの使用がサポートされます。デフォルトモードの C++98 でシステム GCC によってコンパイルされたオブジェクトには互換性がありますが、C++11 モードまたは C++14 モードのシステム GCC でコンパイルされたオブジェクトには互換性がありません。

Red Hat Developer Toolset 10.x 以降では、C++17 言語バージョンの使用は実験的なものになり、Red Hat によってサポートされます。C++17 でコンパイルされた C++ オブジェクトはすべて、Red Hat Developer Toolset 10.x 以降を使用してビルドする必要があります。

重要

アプリケーションで C++11 機能、C++14 機能、および C++17 機能を使用するには、上記の ABI の互換性情報を慎重に検討する必要があります。

-std=c++0x または - std=gnu++0x フラグを使用して、Red Hat Enterprise Linux 7 システムツールチェーンで構築されたオブジェクト、バイナリー、およびライブラリーの組み合わせにより、Red Hat Developer Toolset の GCC を使用して C+ +11 以降の言語バージョンで構築されたオブジェクト、バイナリー、およびライブラリーは明示的にサポートされていません。

上記の C++11、C++14、および C++17 ABI のほかに、Red Hat Developer Toolset では、Red Hat Enterprise Linux アプリケーションの互換性仕様 は変更されません。Red Hat Developer Toolset で構築されたオブジェクトを、Red Hat Enterprise Linux 7 ツールチェーン (特に .o/.a ファイル) で構築したオブジェクトと混在する場合、Red Hat Developer Toolset ツールチェーンはどのリンクにも使用してください。これにより、Red Hat Developer Toolset が提供する新しいライブラリー機能は、リンク時に解決されます。

ベクトルの長さを持つシステムで名前が競合しないように、SIMD ベクトルタイプの新しい標準マングリングが追加されました。Red Hat Developer Toolset のコンパイラーは、デフォルトで新しいマングリングを使用します。GCC C++ コンパイラーコールに -fabi-version=2 または -fabi-version=3 オプションを追加して、以前の標準マングリングを使用できます。以前の mangling を使用するコードの警告を表示するには、-Wabi オプションを使用します。

Red Hat Enterprise Linux 7 では、GCC C++ コンパイラーはデフォルトで古い mangling を使用しますが、強固なエイリアスに対応するターゲットに新しいマングリングを持つエイリアスをエミュレートします。コンパイラーコールに -fabi-version=4 オプションを追加して、新しい標準マングリングを使用できます。以前の mangling を使用するコードの警告を表示するには、-Wabi オプションを使用します。

Red Hat Enterprise Linux 7 では、Red Hat Developer Toolset の GCC C++ コンパイラーは、std::string の古い参照表示実装を使用します。これは、Red Hat Enterprise Linux 7 システムツールチェーンの GCC との互換性のために行われます。つまり、std::pmr::string などの新しい C++17 機能は、Red Hat Developer Toolset コンパイラーを使用している場合でも、Red Hat Enterprise Linux 7 では利用できないことを意味します。