Compartir a través de


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.