在下面的代码中考虑类似A
的别名模板。现在让B
成为A
的别名模板。
在下面的代码中,这些类模板用作结构C
的模板参数,该结构仅专用于一个类型名称(A
)。 clang -std=c++11
存在error: implicit instantiation of undefined template 'C<B>'
,表示需要B
的另一项专门化。
template<int N>
using A = int;
template<int N>
using B = A<N>;
template<template<int> class I>
struct C;
template<>
struct C<A> {};
int main() {
C<A> c;
C<B> d; // clang error: implicit instantiation
}
为什么(如果是偶数) - 尽管不允许使用别名专门化 - A
和B
被视为不同的类模板?是否有一种解决方法允许我重命名一个冗长的模板而不会引起这个问题?