STL lower_bound不符合规范

Mik*_*ike 1 c++ stl visual-c++ visual-c++-2005

下面的代码不能在C++ Builder 2009或Visual C++ 2005中编译,当宏_HAS_ITERATOR_DEBUGGING等于1但如果注释掉它将会.看起来该lower_bound功能不符合规范.该库正在交换参数.这是规范的摘录.value永远应该是第二个论点.我错了吗?

注意:测试代码不是为运行而设计的.它旨在说明库错误.

C++ Spec摘录

template<class ForwardIterator, class T, class Compare>
ForwardIterator
lower_bound(ForwardIterator first, 
            ForwardIterator last, 
            const T& value, 
            Compare comp);
Run Code Online (Sandbox Code Playgroud)

25.3.3.1.3

返回:[first,last]范围内的最远迭代器i,使得对于[first,i]范围内的任何迭代器j,以下相应条件成立:*j <value或comp(*j,value)!= false

Visual Studio错误消息

消息:错误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;
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 7

这是Visual C++ 2005 C++标准库实现中的已知问题(请参阅"在Microsoft Connect上,在调试模式下编译时假定两个参数都是相同类型的二进制谓词参数lower_bound").

该错误已在Visual C++ 2008中修复.