根据($ 3.4.4)一个typedef名称后跟一个class-key是无效的.但我不确定哪个范围?例如:在下面,如果在块中使用详细说明符(如函数内部),编译器不会抱怨.
typedef class { /* ... */ } S;
// invalid
class S;
// ok
void foo() {
class S;
}
Run Code Online (Sandbox Code Playgroud)
使用typedef-name在本地范围内声明一个类是否有效,为什么?
7.1.3第3段说明:
在给定范围内,typedef说明符不得用于重新定义在thascope中声明的任何类型的名称以引用其他类型.[例:
class complex { /* ... */ };
typedef int complex; //
Run Code Online (Sandbox Code Playgroud)
错误:重新定义
然后它去:
-end示例]类似地,在给定范围内,类或枚举不应声明与在该范围内声明的typedef-name同名,并且引用类或枚举本身以外的类型.[例:
typedef int complex;
class complex { /* ... */ };
Run Code Online (Sandbox Code Playgroud)
//错误:重新定义
这是你的榜样.