我正在尝试创建一个链表模板,对于用户定义的类型它很好用,但是对于像int这样的基本类型,gcc和clang的行为不同。
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);
}
虽然clang编译这个代码没有问题,但gcc会生成以下错误消息。
我知道如何解决这个问题,但我还是很感兴趣是否clang太宽容了,我不能依赖这个代码的可移植性,或者这是一个gcc的bug,应该在某个时候解决。错误:无法将'{nullptr,{args#0}}'从“<brace-enclosed initializer list>”转换为“Node<int>”
示例:https://godbolt.org/g/9gnvNQ
{args...}
可以解决GCC和Clang的问题。 - Arnav Borborahreturn {nullptr, args... };
- Richard Crittenstruct { int x; } v = { {1} };
,但它允许int x = {1};
。我认为这是GCC的一个错误。 - cpplearner