다음을 통해 공유


컴파일러 오류 C2482

'identifier': 관리/WinRT 코드에서 '스레드' 데이터의 동적 초기화가 허용되지 않음

설명

관리 또는 WinRT 코드에서 __declspec(스레드) 스토리지 클래스 한정자 특성 또는 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또는 정적 식을 사용하여 스레드 로컬 스토리지를 초기화합니다. 스레드별 초기화를 개별적으로 수행합니다.