我见过像这样的用法:
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-seq或parameter-declaration-clause中使用了elaborated-type-specifier,则标识符将在包含该声明的命名空间中声明为类名;否则,除作为声明外,标识符在包含声明的最小名称空间或块范围中声明。
friend
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句