struct Typo
是一个详细的类型说明符。这会影响名称查找的工作方式。
[基本.查找.elab]
2
:如果详细说明的类型说明符没有嵌套的名称说明符,
除非详细的类型说明符出现在声明中,
以下表格:
class-key attribute-specifier-seq identifier ;
根据[basic.lookup.unequal]查找标识符,但
忽略已声明的任何非类型名。如果
详细的类型说明符由枚举关键字引入,并且
查找未找到以前声明的类型名,
详细的类型说明符格式错误。如果
类键引入了详细的类型说明符,并且
查找找不到以前声明的类型名,或者如果
详细的类型说明符出现在声明中,格式为:
类键属性说明符seq identifier;
详细说明的类型说明符是一个声明,它介绍了
类名称,如[basic.scope.pdecl]中所述。
所以在
std::vector<struct Typo> a;
,因为
结构类型
找不到以前声明的
Typo
,它用作类型的转发声明。因此,它的向量实例化
可以
一
抱怨它得到的类型是不完整的,因为它会试图用它做一些事情。
而在
std::vector<Typo> b;
向上看
打字错误
一无所获。没有以前的声明,因此此时应该发出诊断,以使该标识符未声明。
一
-取决于您要编译到什么标准,以及您使用的向量的成员。已添加对不完整类型的支持。