同样一段使用std:sort的代码,vc可以编译通过,gcc出错,有关问题在哪里

同样一段使用std::sort的代码,vc可以编译通过,gcc出错,问题在哪里
C/C++ code

void ConvexHull::convert_order_points(std::vector<MyPoint>& points)
{
    if (m_points.size() < 3)
        return;

    class sort_func
    {
    public:
        bool operator()(const MyPoint& p1, const MyPoint& p2)
        {
            return p1.y < p2.y || (p1.y == p2.y && p1.x < p2.x);
        }
    } cmp_func;

    std::vector<MyPoint> temp_points = m_points;
    std::sort(temp_points.begin(), temp_points.end(), cmp_func);
    points.push_back(temp_points[0]);
    points.push_back(temp_points[1]);

    int top = 1;
    for(int i = 2; i < (int)temp_points.size(); i++)
    {
        while(top && !ral(points[top], points[top - 1], temp_points[i]))
            top--;
        points[++top] = temp_points[i];
    }
}



在g++在使用g++ -c convex_hull.cpp(文件名) 提示如下错误
convex_hull.cpp: In member function `void ConvexHull::convert_order_points(std::vector<ConvexHull::MyPoint, std::allocator<ConvexHull::MyPoint> >&)':
convex_hull.cpp:35: error: no matching function for call to `sort(__gnu_cxx::__normal_iterator<ConvexHull::MyPoint*, std::vector<ConvexHull::MyPoint, std::allocator<ConvexHull::MyPoint> > >, __gnu_cxx::__normal_iterator<ConvexHull::MyPoint*, std::vector<ConvexHull::MyPoint, std::allocator<ConvexHull::MyPoint> > >, ConvexHull::convert_order_points(std::vector<ConvexHull::MyPoint, std::allocator<ConvexHull::MyPoint> >&)::sort_func&)'

而在vc下连个警告都没有,直接成功,是什么原因,sort函数的参数在两种编译器或者是运行库中不一致么?
1>正在编译...
1>convex_hull.cpp
1>生成日志保存在“file://h:\TEMP\opengl_es\opengl_es\Debug\BuildLog.htm”
1>opengl_es - 0 个错误,0 个警告
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========

------解决方案--------------------
试了一下,可能是低版本gcc对局部类支持的有问题。GCC4.7版能编译过去

C/C++ code
class sort_func
    {
    public:
        bool operator()(const MyPoint& p1, const MyPoint& p2)
        {
            return p1.y < p2.y || (p1.y == p2.y && p1.x < p2.x);
        }
    } cmp_func;

------解决方案--------------------
C++98、C++03标准中局部自定义类型不能实例化模版的问题,C++11中已解决。

可以改用支持C++11标准的g++(一般默认-std参数或者指明-std=c++11即可,如若-std=c++98或-std-c++03则不可)解决,也可将class sort_func类型的定义改为全局的。
------解决方案--------------------
探讨

引用:

C++98、C++03标准中局部自定义类型不能实例化模版的问题,C++11中已解决。

可以改用支持C++11标准的g++(一般默认-std参数或者指明-std=c++11即可,如若-std=c++98或-std-c++03则不可)解决,也可将class sort_func类型的定义改为全局的。


是不是就是说VC2008在自作聪明啊,本来不符合标准的……