当宏_HAS_ITERATOR_DEBUGGING
等于1
时,以下代码无法在C ++ Builder 2009或Visual C ++ 2005中编译,但如果注释掉它将会。 lower_bound
函数似乎不符合规范。该库正在交换参数。这是规范的摘录。 value
应始终是第二个参数。我错了吗?
注意:测试代码不是为运行而设计的。它旨在说明库错误。
template<class ForwardIterator, class T, class Compare>
ForwardIterator
lower_bound(ForwardIterator first,
ForwardIterator last,
const T& value,
Compare comp);
25.3.3.1.3
返回:[first,last]范围内的最远迭代器i,使得对于[first,i]范围内的任何迭代器j,以下相应条件成立:* j&lt; value或comp(* j,value)!= false
消息:错误C2664:'double mike :: operator()(const double,const char *)const':无法将参数1从'const char [1]'转换为'const double'
文件:c:\ program files \ microsoft visual studio 8 \ vc \ include \ xutility
行号:314
#define _HAS_ITERATOR_DEBUGGING 1 // needs to be in the stdafx.h file for Visual Studio
#include "stdafx.h"
#include <algorithm>
#include <functional>
struct mike : public std::binary_function<double, char*, double> {
double operator() (const double i, const char*) const {
return i;
}
};
int main()
{
double r[] = {0};
std::lower_bound(r, r, "", mike());
return 0;
}
答案 0 :(得分:7)
这是Visual C ++ 2005 C ++标准库实现中的已知问题(请参阅"Binary predicate paramter to lower_bound
assumes that both parameters are the same type when compiling in debug mode" on Microsoft Connect)。
该错误已在Visual C ++ 2008中修复。