在下面的示例代码中,重载的 operator< 不是 const 限定的,它在 Visual C++ 下编译(所有版本到 2013 预览版),但在 Clang 下,它会抛出一个错误 - 注意:候选函数不可行:'this' 参数具有类型“const Entry”,但方法未标记为 const bool operator<( const Entry& other )。
#include "stdafx.h"
#include <vector>
#include <algorithm>
struct Entry
{
unsigned int age;
bool operator<( const Entry& other ) // !!! no const qualification here !!!
{
return age < other.age;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<Entry> entries;
for( unsigned int i = 0; i < 100; ++i )
{
Entry entry;
entry.age = i;
entries.push_back( entry );
}
// Sort by age
std::sort( entries.begin(), entries.end() );
return 0;
}
在强制比较/关系运算符的 const 正确性方面,Visual C++ 是否不符合标准?或者这与 std::sort 有关?