nob*_*bar 10 c++ class language-lawyer self-reference
以下是合法的吗?
template< typename T >
struct tree_node
{
T t;
std::vector<tree_node> children;
};
Run Code Online (Sandbox Code Playgroud)
对这篇文章的评论似乎表明事实并非如此.
编辑:这不会打击我作为"未定义的行为"类型的场景.预期的语义是明确的.如果它是不完整类型的无效用法,那么它应该是编译时错误.
在我的测试中,这似乎工作正常(我使用了GCC和Clang - 两者都有-Wall -Werror -std=c++11).
语言定义中是否有某些东西(在C++ 17之前)直接或间接地将其指定为未定义的行为,或者它只是指定不足?
请记住,这在结构上非常类似于以下内容:
typedef int T;
struct tree_node;
struct tree_node
{
T t;
tree_node * children;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
856 次 |
| 最近记录: |