我在阅读有关C++模板编程中
但是让我感到奇怪的是,书中相同的示例在没有
我正在使用VS2015。那么,问题是为什么在这种情况下不需要使用
更新1:感谢@FrançoisAndrieux的评论,据此问答报告,在VS2008和VS2010中也发生了同样的情况。
typename
的用法(如此问答)时,发现当使用依赖嵌套类型名称时,应该使用typename
来避免解析歧义。我还在Scott Meyers的书《Effective C++》的第42项中检查了这一点。但是让我感到奇怪的是,书中相同的示例在没有
typename
的情况下也能正常工作。以下是代码:template<class C>
void Print2nd(const C & cont)
{
if (cont.size() >= 2)
{
C::const_iterator * iter1 = new C::const_iterator(cont.begin()); // why typename is NOT needed?
C::const_iterator iter2 = cont.begin(); // why typename is NOT needed?
(*iter1)++;
iter2++;
int value1 = **iter1;
int value2 = *iter2;
std::cout << "The value of 2nd with pointer is: " << value1 << std::endl;
std::cout << "The value of 2nd without pointer is: " << value2 << std::endl;
}
}
int main()
{
std::vector<int> vect = {1,2,3,4,5,6};
Print2nd(vect);
return 0;
}
我正在使用VS2015。那么,问题是为什么在这种情况下不需要使用
typename
?最近的C++编译器有任何升级可以避免在这种情况下使用typename
吗?或者我在代码中犯了一个错误?更新1:感谢@FrançoisAndrieux的评论,据此问答报告,在VS2008和VS2010中也发生了同样的情况。