假设以下示例
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”。哪条规则适用于第二条?