模板模板参数不是类型

时间:2019-04-07 10:20:03

标签: c++

有一个带有模板参数的嵌套模板类型,但这在另一个模板函数中使用,其中类型引用是从属名称。

template <class T1>
struct s
{
    template <class T2>
    struct s2
    {

    };
};

template <template <class> class T>
void func()
{
    T<int>();
}

template <class T>
void func2()
{
    func<s<T>::s2>(); //error
}

但是,这会产生错误:

  

错误:相关名称s<T>::s2被解析为非类型,但是实例化却产生了一个类型
  注意:如果要使用类型,请说typename s<T>::s2

添加typename并没有帮助:

  

错误:typename s<int>::s2命名为template<class T2> struct s<int>::s2,不是类型

添加template均无效:

  

错误:解析模板参数列表中的错误
  func<typename s<T>::template s2>();

1 个答案:

答案 0 :(得分:1)

typename消歧词不能用于模板,因为它指示具体类型。可以使用template消歧词,但不使用typename,因为这样就不需要参数列表:

func<s<T>::template s2>();