Я пытаюсь создать шаблон связанного списка, и он отлично работает для определенных пользователем типов, но для таких фундаментальных типов, как 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 генерирует следующее сообщение об ошибке.
error: не удалось преобразовать '{nullptr, {args # 0}} из' < brace-closeded list list > to 'Node <int>
Пока я знаю, как решить эту проблему, мне все еще интересно, является ли clang слишком разрешительным, и я не могу полагаться на переносимость этого кода, или это ошибка gcc, которая должна быть разрешена когда-то.
Пример: https://godbolt.org/g/9gnvNQ