C++ 为什么要使用“优先级”语句<;配对<;int,int>;,向量<;配对<;int,int>>;,比较>;pq;`是C+中的错误+;03但在C+中正确+;11?

C++ 为什么要使用“优先级”语句<;配对<;int,int>;,向量<;配对<;int,int>>;,比较>;pq;`是C+中的错误+;03但在C+中正确+;11?,c++,templates,C++,Templates,下面的代码片段声明了类型为pair的优先级队列,并在C++11中使用了类比较器和correct,但在C++03中显示了错误。原因是什么 class compare { public: bool operator () (pair<int,int>&p1,pair<int,int>&p2) { return p1.second > p2.second; }

下面的代码片段声明了类型为
pair
的优先级队列,并在C++11中使用了类比较器和correct,但在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;    
类比较
{
公众:
布尔运算符()(对和p1、对和p2)
{
返回p1.second>p2.second;
}
};
优先级队列pq;
C++03编译器显示:

  • 错误:“模板类std::priority_queue”的模板参数使用本地类型“main()::compare” 优先级队列,向量>,比较>pq
  • 错误:尝试实例化“模板类std::priority\u队列”

在C++11之前,不可能将本地类型作为模板参数传递

这就是C++03编译器拒绝该代码的原因

如果您使用的是现代编译器,可以将其转换为C++11或C++14模式。
否则,你就不走运了


[C++11:C.2.6]:
第14条:模板

[……]

14.6.4.2
更改:允许对具有内部链接的函数进行依赖调用
理由:过度约束,简化过载解决规则。
<强>对原始特征的影响:>有效的C++ 2003程序可以得到与国际标准不同的结果。
什么是C++ 5.1?(提示:没有;它不存在)@BarryTheHatchet我怀疑G++5.1,尽管c++11标准应该是该版本的默认值。@πάνταῥεῖ: 我怀疑Borland Turbo C++ 5.01是用于DOS仿真器,但是我们必须允许那个<代码> 0 < /COD>的下降是真的。我怀疑它,它来自C++标准化之前,可能不会有一个类,如<代码> PrimyIyQueals。