此代码在Visual Studio 2013上运行,但不在gcc 4.9.2:
上运行template <typename T>
void foo(){
T::value_type bar('a');
cout << bar << endl;
}
int main() {
foo<string>();
return 0;
}
似乎Visual Studio 2013推断出类型允许我实现模板参数中定义的类型而gcc 4.9.2 does not。
是否有解决方法可以在gcc中使用此行为?
答案 0 :(得分:2)
您需要告诉编译器T::value_type
命名一个类型,以便它知道如何解析声明。
typename T::value_type bar('a');
有关您需要执行此操作的位置和原因的详细信息,请参阅this question。