以下哪种语法是首选或在法律上是正确的:
template< class T >
struct S
{
typedef std::vector< S > V;
// typedef std::vector< S< T > > V;
Visual C ++和gcc接受,但C ++ Builder XE3报告&#34; E2299无法生成模板专业化&#34;第一个错误。
答案 0 :(得分:7)
两者都是正确的;类名注入到类的范围内:What feature of C++ lets template classes refer to themselves without template arguments?
偶尔使用该功能;例如,标准在标准库的规范中使用它,以简洁。为清楚起见,您可以考虑在自己的代码中避免使用它。