C++ 模板参数:以下示例中应用了什么规则
假设下面的例子C++ 模板参数:以下示例中应用了什么规则,c++,c++11,templates,template-templates,using-declaration,C++,C++11,Templates,Template Templates,Using Declaration,假设下面的例子 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 <&
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;
}
使用名称空间std;
模板
结构X
{
X()
{
std::cout
。我希望打印“1”。但运行此代码将打印“2”。第二个规则中应用了哪条规则
第二个很奇怪。分析X
会转换为X
。我希望打印“1”。但运行此代码会打印“2”
没有
你知道Z
被定义为Y
,所以Y
和Z
是一样的
如果将
X
转换为X
(并且X
不能匹配,因为Y
是X
仅接受模板参数的类型)。如果将其转换为X
,则会出现错误,因为t
未定义(另一个错误是因为Y
不是模板(按照X
的要求),它是一个类)。