コンパイラ エラー C2482
'identifier': 動的な 'thread' ローカル データの初期化はマネージド/WinRT コードでは許可されません
解説
マネージド コードまたは WinRT コードでは、__declspec(thread) ストレージ クラス修飾子属性または thread_local ストレージ クラス指定子を使用して宣言された変数は、実行時に評価が必要な式で初期化することはできません。 これらのランタイム環境で、__declspec(thread)
または thread_local
データを初期化するには、静的な式が必要です。
例
次の例では、マネージド (/clr) および WinRT (/ZW) コードで C2482 を生成します。
// C2482.cpp
// For managed example, compile with: cl /EHsc /c /clr C2482.cpp
// For WinRT example, compile with: cl /EHsc /c /ZW C2482.cpp
#define Thread __declspec( thread )
Thread int tls_i1 = tls_i1; // C2482
int j = j; // OK in C++; C error
Thread int tls_i2 = sizeof( tls_i2 ); // Okay in C and C++
この問題を解決するには、定数、constexpr
、または静的な式を使用して、スレッド ローカル ストレージを初期化します。 スレッド固有の初期化は、個別に実行します。