【发布时间】:2019-01-29 04:21:14
【问题描述】:
假设下面的例子
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”。第二条应用了哪条规则?
【问题讨论】:
-
如果它被翻译成
X< Y < T > >,你会得到一个错误,因为T是未定义的(另一个错误是因为Y<T>不是模板(X要求),这是一门课)。
标签: c++ c++11 templates template-templates using-declaration