gnz*_*lbg 12 templates explicit-instantiation c++11 template-aliases
是否可以通过模板别名显式实例化模板类?
如果是这样,怎么样?否则,有人可以指向讨论和决定反对的ISO文件吗?
template<class T>
struct A { };
/// Explicit instantiate A for int:
template struct A<int>;
/// Alias
template<class T>
using B = A<T>;
/// Explicitly instantiate A for double via alias B:
template struct B<double>;
/// error: elaborated type refers to a non-tag type
Run Code Online (Sandbox Code Playgroud)
不应该实例化,A<double>因为B<T>它只是一个不同的名称A<T>?
asc*_*ler 11
这是间接禁止的,因为:
7/3者禁用写明确的专业化无类的关键字(class,struct,或union):
在一个简单声明中,只有在声明一个类(第9节)或枚举(7.2)时,也就是说,当decl-specifier-seq包含一个类说明符时,可以省略可选的init-declarator-list,详细说明-type-specifier,带有类键(9.1)或枚举说明符.
7.1.6.3/2禁止将类密钥与别名模板特化相结合:
3.4.4描述了如何在详细类型说明符中对标识符进行名称查找....如果标识符解析为typedef-name或simple-template-id解析为别名模板特化,则elaborated-type-specifier格式不正确.