请看破解后更新的代码;
我有以下模板类:
template<class T> class CDFAManListOps
{
static std::list<T>::iterator CDFAManListOps::GetIterator(std::list<T>* list, int pId)
{
}
}
当我尝试编译它时,它说
std::list<T>::iterator' : dependent name is not a type 1> prefix with 'typename' to indicate a type
.
但是,如果我像编译器要求的那样更改函数:
static typename std::list<T>::iterator CDFAManListOps::GetIterator(std::list<T>* list, int pId)
编译器(VS12)崩溃并出现以下错误:
fatal error C1001: An internal error has occurred in the compiler.
1> (compiler file 'msc1.cpp', line 1443)
1> To work around this problem, try simplifying or changing the program near the locations listed above.
知道这段代码有什么问题吗?
更新:这是我能得到的重现此崩溃的最少代码的全部内容。
#include <list>
template<class T> class CDFAManListOps
{
static typename std::list<T>::iterator CDFAManListOps::GetIterator(std::list<T>* list, int pId)
{
}
static typename std::list<T>::iterator CDFAManListOps::GetIterator(std::list<T>* list, T object)
{
}
};
int main()
{
}
如果我取出这两个GetIterator
函数中的任何一个,程序就会编译并运行良好。只有当这两个函数都存在时,编译器才会崩溃。这是否使我的代码中的问题更清楚了?
(此外,如果有人想了解其状态,我将向 Microsoft Connect 提交错误报告并在此处发布链接。)
我在此处提交了有关 Microsoft Connect 的错误报告。
更新:微软决定在可预见的将来不对这个特定的错误做任何事情。请参阅上面的 Microsoft Connect 链接。