下面的代码失败在OS X 10.8的libc使用时++用的XCode 4.5的铛编译++:
#include <map>
#include <string>
class Foo {
public:
explicit Foo(int val_) : val(val_) {}
int val;
};
struct FooComparator {
bool operator()(const Foo& left, const Foo& right) {
return left.val < right.val;
}
};
int main(int argc, char* argv[]) {
std::map<Foo, std::string, FooComparator> m;
Foo f(4);
m[f] = std::string("four");
return 0;
}
错误:
broken.cpp:11:8:注:候选函数不可行: '这个' 参数的类型为 'const的FooComparator',但方法没有被标记const的布尔运算符()(常量富&左,常量的Foo,右){
如果我关闭的libc ++与建设的libstdc ++就万事大吉了。 很显然,我可以解决此通过使FooComparator ::运算符()const的,但我想知道这是否是一个的libc ++的问题过于严格,或是否标准(包括C ++ 03和C ++ 11 )是否确实需要比较的运算符()const的(在这种情况下,它的工作原理与的libstdc事实++是一个快乐的事故)。