为什么在这种情况下需要typename?

时间:2019-08-06 12:07:34

标签: c++ templates types standards typename

#include <string>

template<typename>
void g()
{}

template<typename T>
void f()
{
    g<typename T::value_type>(); // ok
    g<T::value_type>(); // ok
    typename T::value_type n1; // ok
    T::value_type n2; // failure        
}

int main()
{
    f<std::string>();
}

使用vc ++编译。

在上面的代码中,T::value_type是类型还是变量可以在编译时确定。这里没有歧义,否则g<T::value_type>()也将要求写成g<typename T::value_type>()

为什么在这种情况下需要输入类型名?

背后的原理是什么?

0 个答案:

没有答案