以下代码片段声明了类型为pair<int,int>
的priority_queue,并使用了类比较器并在C ++ 11中更正,但在C ++ 03中显示错误。是什么原因?
class compare
{
public:
bool operator () (pair<int,int>&p1,pair<int,int>&p2)
{
return p1.second > p2.second;
}
};
priority_queue <pair<int,int>, vector<pair<int,int> >,compare>pq;
C ++ 03编译器显示:
答案 0 :(得分:1)
在C ++ 11之前,不可能将本地类型作为模板参数传递。
这就是你的C ++ 03编译器拒绝代码的原因。
如果您正在使用现代编译器,则可以将其翻转为C ++ 11或C ++ 14模式。
否则,你运气不好。
[C++11: C.2.6]:
第14条:模板[..]
14.6.4.2
更改:允许依赖调用具有内部链接的功能
理由:过度约束,简化了重载决策规则 对原始功能的影响:有效的C ++ 2003程序可能会获得与此国际标准不同的结果。