小编Ste*_*ven的帖子

支持模板结构的初始化

我正在尝试创建一个链表模板,它适用于用户定义的类型,但对于基本类型,如gcc和clang的int行为不同.

template<class T>
struct Node {
  Node* next;
  T val;
};

template<class T, class... Args>
Node<T> create(Args... args) {
  return {nullptr, {args...}};
}

int main() {
  create<int>(0);
}
Run Code Online (Sandbox Code Playgroud)

虽然clang编译代码没有问题,但gcc会生成以下错误消息.

错误:无法将'{nullptr,{args#0}}'从'<brace-enclosed initializer list>'转换为'Node <int>'

虽然我知道如何解决这个问题,但我仍然感兴趣的是clang是否过于宽松,我不能依赖这段代码的可移植性,或者它是一个gcc bug,应该在某个时候解决.

示例:https://godbolt.org/g/9gnvNQ

c++ gcc clang language-lawyer

11
推荐指数
1
解决办法
480
查看次数

SIMD 寄存器的数学函数

根据https://sourceware.org/glibc/wiki/libmvec GCC 具有数学函数的矢量实现。它们可以被编译器用于优化,可以在这个例子中看到: https: //godbolt.org/g/IcxtVi,编译器使用一些损坏的正弦函数并一次对 4 个双精度数进行操作

我知道如果我需要数学函数,可以使用 SIMD 数学库,但我仍然感兴趣是否有一种方法可以使用__m256d某种内在函数或任何其他方式手动调用 GCC 中已经存在的向量化数学函数?

gcc simd avx

6
推荐指数
1
解决办法
3810
查看次数

标签 统计

gcc ×2

avx ×1

c++ ×1

clang ×1

language-lawyer ×1

simd ×1