Partager via


Erreur du compilateur C2482

'identifier' : initialisation dynamique des données 'thread' non autorisées dans le code managé/WinRT

Notes

Dans le code managé ou WinRT, les variables déclarées à l’aide de l’attribut modificateur de classe de stockage __declspec(thread) ou du spécificateur de classe de stockage thread_local ne peuvent pas être initialisées avec une expression qui nécessite une évaluation au moment de l’exécution. Une expression statique est requise pour initialiser ou thread_local données __declspec(thread) dans ces environnements d’exécution.

Exemple

L’exemple suivant génère l’erreur C2482 dans le code managé (/clr) et dans le code 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++

Pour résoudre ce problème, initialisez le stockage local de thread à l’aide d’une constante, constexprou d’une expression statique. Effectuez une initialisation spécifique à un thread séparément.