在参数列表中声明不完整的类型模板参数

Cpp菜鸟

我见过像这样的用法:

boost::error_info<struct tag_name, std::string> name_info;

这里tag_name命名了一个不完整的类型,struct它前面关键字似乎是就地声明了它,而不是稍微冗长一些:

struct tag_name;
boost::error_info<tag_name, std::string> name_info;

该标准的相关部分允许什么?

哥伦布

第3.4.4 / 2节规定了在任何情况下如何查找精化类型说明符以及它们可能产生的影响:

如果elaborated-type-specifier是由class-key引入的,并且此查找未找到先前声明的type-name [..],elaborated-type-specifier是一个声明,该声明引入了3.3中所述class-name。 2

然后§3.3.2/ 7(.2)读取

在第一声明的类的声明的点阐述型说明符如下所示:[..]用于阐述型说明符的形式的

         类键标识符

如果在命名空间范围内定义的函数decl-specifier-seqparameter-declaration-clause使用elaborated-type-specifier,则标识符将在包含该声明的命名空间中声明为类名否则,除作为声明外,标识符在包含声明的最小名称空间或块范围中声明。friend

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章