Error del compilador C2482
'identificador': no se permite la inicialización dinámica de datos thread locales en el código administrado o de WinRT
Comentarios
En código administrado o de WinRT, las variables declaradas con el atributo modificador de clase de almacenamiento __declspec(thread) o el especificador de clase de almacenamiento thread_local no se pueden inicializar con una expresión que requiera evaluación en tiempo de ejecución. Se requiere una expresión estática para inicializar datos de __declspec(thread)
o thread_local
en estos entornos en tiempo de ejecución.
Ejemplo
El ejemplo siguiente genera el error C2482 en código administrado (/clr) y de WinRT (/ZW):
// 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++
Para corregir este problema, inicialice el almacenamiento local del subproceso con una constante, constexpr
, o una expresión estática. Realice cualquier inicialización específica del subproceso por separado.