第5章 RHEL 10 における主な変更点
以下は、RHEL 10 における重要な変更点です。
5.1. C++ における互換性に影響を与える変更 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
std::condition_variable::waitがスレッドのキャンセルポイントになる-
GCC 11 以前では、
std::condition_variable::wait関数はnoexceptであったため、スレッドのキャンセルと互換性がありませんでした。その結果、pthread_cancelの呼び出しによってstd::condition_variable::waitでブロックされたスレッドがキャンセルされると、プロセスは終了します。GCC 12 以降では、std::condition_variable::waitはpthread_cancel関数の呼び出しによってキャンセルされる可能性があり、その際にはスタックがアンワインドされます。例外をスローしないwaitに依存するコードがある場合は、コードを確認して適切なアクションを実行してください。 - 非推奨のクラステンプレート, 一部のクラステンプレートは C++ の新しいバージョンで非推奨となりました。GCC 12 以降では警告の診断が生成されます。
次のクラステンプレートは C++11 以降では非推奨となりました。
-
std::unary_function -
std::binary_function
-
-
std::iteratorクラステンプレートは、C++17 以降では非推奨となりました。
警告診断を防ぐには、次のいずれかのアクションを実行します。
コードに他の変更を加えたくない場合は、GCC の診断プラグマを使用して警告診断を無効にします。以下に例を示します。
#pragma GCC diagnostic push #pragma GCC diagnostic ignored “-Wdeprecated-declarations" class Functor : public std::unary_function<int, int> { /* … */ }; #pragma GCC diagnostic popコードを C++ の新しいバージョンと互換性を持たせたい場合は、コード内のこれらのクラステンプレートをネストされた typedefs に置き換えます。たとえば、
std::unary_function基本クラスをresult_typeおよびargument_typetypedefs に置き換えることができます。class Functor { using result_type = int; using argument_type = int; /* … */ };