나는 다음과 같은 작은 코드로 문제를 감소 : 왜 thread_local의 이러한 사용은 충돌합니까?
struct tls {
~tls() {}
void dont_opt_out() {}
};
thread_local tls tls_obj;
int main(int argc, char **argv) {
tls_obj.dont_opt_out();
}
이 프로그램이 충돌을 실행합니다. 왜?
Windows에서 gcc 버전 4.8.2를 사용하고 있습니다. g++ -std=c++11 main.cpp
으로 컴파일합니다.
[coliru] (http://coliru.stacked-crooked.com/a/fd105c040c971bd1) 및 [IDEone] (http://ideone.com/GxxmPu)에서 작동 GCC 4.8.1 ... – Potatoswatter
@Potatoswatter coliru is linux - 이것은 Windows에 있습니다. – orlp
데이터 포인트입니다. Windows 런타임 라이브러리가 손상된 것 같습니다. 그건 그렇고, 충돌의 본질은 무엇입니까? – Potatoswatter