#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>()
。
为什么在这种情况下需要输入类型名?
背后的原理是什么?