使用Visual Studio 2012时,以下代码编译时没有错误(T是模板参数):
pair<map<T, int>::iterator, bool> ret;
但是,当我使用g ++时,它会抛出错误消息
error: type/value mismatch at argument 1 in template parameter list for template<class _T1, class _T2> struct std::pair
由于某种原因,它不会将map<T, int>::iterator
识别为类型。我应该如何解决这个问题呢?
答案 0 :(得分:5)
您需要告诉编译器限定标识map<T, int>::iterator
确实是一种类型(它可以是静态成员)
pair<typename map<T, int>::iterator, bool> ret;
^^^^^^^^
似乎一次,因为VS总是比g ++做错了更好。
答案 1 :(得分:2)
默认情况下,假设从属名称不是类型,除非您明确说明。
使用它来做到这一点:
typename map<T, int>::iterator