我的大部分 c++ 编译都使用 gcc-4.9。最近我决定尝试使用 clang 来编译我的项目。我的项目大量使用 gcc 的 __thread 存储。
所以,我决定测试下面的代码
//main.cpp
class A
{
};
int main()
{
static __thread A * a = new A();
}
当用 g++4.9 编译时,代码编译得很好(这是预期的,因为 gcc 支持 __thread 的动态初始化,如果它们是函数作用域的静态。)
但是当我使用 clang++3.5 编译时,我得到了这个错误
main.cpp:8:26: error: initializer for thread-local variable must be a constant expression
static __thread A * a = new A();
那么这个功能是否缺少clang++3.5?
我已经尝试寻找这个问题的答案(我的搜索技巧不好),还没有找到一个令人满意的答案,所以如果我错过了或者这是一个重复的问题,请引导我找到原来的问题。