0

假设以下示例

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”。哪条规则适用于第二条?

4

1 回答 1

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只接受模板模板参数的类型)。

于 2018-08-22T20:52:36.107 回答