假设以下示例
using namespace std;
template <template <typename> class>
struct X
{
X()
{
std::cout << "1";
}
};
template <typename>
struct Y {};
template <typename T>
using Z = Y<T>;
template <>
struct X<Y>
{
X()
{
std::cout << "2";
}
};
int main()
{
X<Y> x1;
X<Z> x2;
}
表达式X<Y> x1
显然是使用打印“ 2”的专业化
第二个很奇怪。进行分析,将X<Z>
转换为X< Y < T > >
。我希望打印“ 1”。但是运行该代码将显示“ 2”。第二个规则适用哪个规则?
答案 0 :(得分:0)
第二个很奇怪。进行分析,将
X<Z>
转换为X< Y < T > >
。我希望打印“ 1”。但是运行代码会显示“ 2”。
否。
您将Z<T>
定义为Y<T>
,因此Y
和Z
是同一件事。
X<Z>
转换为X<Y<T>>
并不正确(并且X<Y<T>>
不匹配,因为Y<T>
是X
只接受的类型模板模板参数)。