首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GLM和原子在g++ 4.8中的应用

GLM和原子在g++ 4.8中的应用
EN

Stack Overflow用户
提问于 2014-06-30 15:31:30
回答 1查看 834关注 0票数 2

几天前,我从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,但我甚至不知道怎么得到它。这里有一个简单的代码,它在我的机器上崩溃:

代码语言:javascript
复制
#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相同的错误。

EN

回答 1

Stack Overflow用户

发布于 2014-06-30 15:41:21

看来tvec3<float>不适合制作std::原子

您需要检查tvec3<float>是否真正满足了TriviallyCopyable概念提供的所有约束:

需求

  • 普通复制构造函数
  • 平凡移动构造函数
  • 平凡拷贝赋值算子
  • 平凡移动赋值算子
  • 平凡析构函数
  • 没有虚拟函数或虚拟基类
  • 所有(非静态)成员和基类都是TriviallyCopyable。

否则,使用单独的std::mutex保护容器不受并发访问的影响。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24493752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档