C++ 为什么复杂类型说明符中不允许使用typedef?

C++ 为什么复杂类型说明符中不允许使用typedef?,c++,C++,当我遇到需要使用精心设计的类型说明符这一事实时,我想显式地实例化一个模板 目前,缔约国声明: 如果(类-)名称引用typedef名称、类型别名、模板类型 参数或别名模板专用化,则程序是 格式不正确 我想了解一下为什么会这样。 (对typedef部分特别感兴趣) 编辑: using MyType = MyTemplate<Many,Parameters>; template class MyType; // invalid code 使用MyType=MyTemplate; 模板类M

当我遇到需要使用精心设计的类型说明符这一事实时,我想显式地实例化一个模板

目前,缔约国声明:

如果(类-)名称引用typedef名称、类型别名、模板类型 参数或别名模板专用化,则程序是 格式不正确

我想了解一下为什么会这样。 (对typedef部分特别感兴趣)

编辑:

using MyType = MyTemplate<Many,Parameters>;
template class MyType; // invalid code
使用MyType=MyTemplate;
模板类MyType;//无效代码
从中我了解到,此限制仅适用于
MyType
,并且
许多
参数
都可以作为typedefs。

标准规定:

7.1.6.3详细的类型说明符[dcl.type.elab]:2)。。。如果
标识符
解析为
类型定义名称
简单模板id
解析为别名模板专用化,则
详细类型说明符
格式不正确

因此,该标准明确禁止在详细的类型说明符中使用typedef


至少typedef不必是类、联合或枚举类型的别名,但它也可以是基元类型的别名,并且这种情况下没有详细的类型说明符,也没有多大意义。

“当我遇到需要使用详细的类型说明符的事实时。”您能否提供一个?您是否正在尝试转发声明
MyType
?你真倒霉。最好是向前声明组件,并将别名放在需要向前声明的位置。请注意,
MyType
不是模板(它可能是一个类)。正确实现C++名称查找非常困难,这条规则让编译器编写者有了喘息的机会。