有一个带有模板参数的嵌套模板类型,但这在另一个模板函数中使用,其中类型引用是从属名称。
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>();
答案 0 :(得分:1)
typename
消歧词不能用于模板,因为它指示具体类型。可以使用template
消歧词,但不使用typename
,因为这样就不需要参数列表:
func<s<T>::template s2>();