这个带有元组的递归引用是否安全?

Mat*_*ton 2 c++ c++11 visual-studio-2013

我正在试验并写下这个怪物:

class my_tuple : public std::tuple < std::vector<my_tuple> > {};
Run Code Online (Sandbox Code Playgroud)

它似乎可以编译并实际工作.我发现它很狡猾,因为以下内容无法编译:

using my_other_tuple = std::tuple < std::vector<my_other_tuple> > ;
Run Code Online (Sandbox Code Playgroud)

最终,我试图解决为什么my_tuple有效以及是否存在潜在的可怕后果.我正在努力学习元组是什么以及我能用/应该用它们做些什么.因此,如果有人愿意对此发表评论,请提供一些非常好的见解,我将不胜感激.

Windows 7和VS 2013.

T.C*_*.C. 5

class my_tuple : public std::tuple < std::vector<my_tuple> > {};
Run Code Online (Sandbox Code Playgroud)

这是当前未定义的行为,因为它实例化了一个标准库容器,std::vector其类型my_tuple不完整,在关闭}其定义之前不会完成.但是,有一项建议允许实例化某些标准容器,包括std::vector不完整类型的容器.Boost.Containers也支持不完整的类型.

using my_other_tuple = std::tuple < std::vector<my_other_tuple> > ;
Run Code Online (Sandbox Code Playgroud)

这是不正确的.[dcl.typedef]/p2,强调我的:

一个typedef的名称,也可以通过引入的别名声明.的 标识符下面的using关键字成为typedef的名称和可选属性说明符-SEQ标识符 appertains到的typedef名.它具有与typedef说明符引入的语义相同的语义.特别是,它没有定义新类型,它不应出现在type-id中.