以下内容是否合法?
template< typename T >
struct tree_node
{
T t;
std::vector<tree_node> children;
};
针对这篇文章的一条评论似乎表明它不是未定义行为。
编辑:我认为这不是一种“未定义行为”类型的场景。预期的语义是明确无歧义的。如果这是不完整类型的无效使用,则应该是编译时错误。
在我的测试中,这似乎可以正常工作(我同时使用了GCC和Clang--都带有-Wall -Werror -std=c++11
)。
在C++17之前的语言规范中是否有直接或间接地将此指定为未定义行为的内容,或者只是未充分说明?
请注意,这与以下内容在结构上非常相似:
typedef int T;
struct tree_node;
struct tree_node
{
T t;
tree_node * children;
}
shared_ptr<tree_node>
而不仅仅是tree_node
。 - Brent Bradburnshared_ptr<vector<tree_node>>
。 - Brent Bradburn