我想了解以下代码是否正确,或者不是:
Broadcast
此代码使用多个工具链编译而不会产生错误(例如,请参阅here)。 问题是现在我得到一个实例化错误(可能与我使用llvm libc ++,不确定版本有关)。
GraphShape
如果这段代码是正确的,我不想调查bug的来源(编译器或std库实现)或者有一个解决方法:再次,我主要想了解上面的代码是否正式正确。
答案 0 :(得分:16)
代码格式不正确。此时:
template<class T>
struct Node {
std::deque<Node<T> > branches; // <==
Node<T>
仍然是一个不完整的类型。目前有三个容器的不完整类型的内置异常:
T
时可以使用不完整类型forward_list
完整性要求17.6.3.5.1。 T
之前应在完成专业化的任何成员之前完成
引用了forward_list
。“[forwardlist.overview]/4 T
时可以使用不完整类型list
要求17.6.3.5.1。在T
所得专业化的任何成员之前,list
应完成
引用。“[list.overview]/3 T
时可以使用不完整类型vector
要求17.6.3.5.1。 T
在完成专业化的任何成员之前应完成
引用了vector
。“[vector.overview]/3 deque
没有这样的措辞,目前需要一个完整的类型。似乎与我不一致,允许vector
但不是deque
的不完整类型,但这就是它的方式。
答案 1 :(得分:2)
它不是编译器中的错误,也不是标准库中的错误。该计划形成不良。您可能无法使用不完整的值类型实例化std::deque
。