考虑与先前的SO问题的代码C ++循环依赖混淆邻接表表示
#include <cstddef>
#include <unordered_set>
class Node;
class Hash {
public:
std::size_t operator()(const Node &node) const;
};
class Node {
public:
int data;
std::unordered_set<Node, Hash> links;
};
inline size_t Hash::operator()(const Node &node) const {
return node.data;
}
int main()
{
}
使用克++ 4.9.2或g ++ 5时,此代码不编译,但是与铛++ 3.5编译。
通过克吐出++错误开头
error: invalid application of 'sizeof' to incomplete type 'Node'
: std::aligned_storage<sizeof(_Tp), std::alignment_of<_Tp>::value>
问:请问Node
必须是一个完整的类型声明的时候std::unordered_set
? 看起来像要么克++或铛++是错在这种情况下。
PS:我知道这种情况可以通过使用可避免std::shared_ptr<Node>
代替,但是想了解在上面的代码的行为。