几天前,我从Windows转到Linux,到目前为止我非常喜欢它。不幸的是,我在移植我的项目时遇到了问题。在这里,我用GLM做矢量计算和原子计算。在Visual上一切都很好。
我遇到的第一个问题是,由于某种原因,g++ 4.6在我包含atomic头时就给了我一个atomic。然后我转到g++ 4.8,问题就解决了。但是现在,当我使用一个像atomic<vec3>这样的向量的原子时,我就得到了一个新的问题。g++是这么说的:
/usr/include/c++/4.8/atomic|167|error: function ‘std::atomic<_Tp>::atomic() [with _Tp = glm::detail::tvec3<float>]’ defaulted on its first declaration with an exception-specification that differs from the implicit declaration ‘std::atomic<glm::detail::tvec3<float> >::atomic()’|
我不知道怎么解决这个问题。我想试试g++ 4.9,但我甚至不知道怎么得到它。这里有一个简单的代码,它在我的机器上崩溃:
#include <iostream>
#include <glm.hpp>
#include <atomic>
using namespace std;
using namespace glm;
atomic<vec3> b;
int main(){
cout << "hello" << endl;
return 0;
}我使用代码::块作为IDE。当我使用clang++时,我得到了与g++ 4.6相同的错误。
发布于 2014-06-30 15:41:21
看来tvec3<float>不适合制作std::原子。
您需要检查tvec3<float>是否真正满足了TriviallyCopyable概念提供的所有约束:
需求
否则,使用单独的std::mutex保护容器不受并发访问的影响。
https://stackoverflow.com/questions/24493752
复制相似问题