C++ 错误:与';不匹配;运算符==';对于boost::tuple

C++ 错误:与';不匹配;运算符==';对于boost::tuple,c++,boost,operator-overloading,C++,Boost,Operator Overloading,我打算为boost::tuple #include <iostream> #include <vector> #include <boost/tuple/tuple.hpp> //#include <boost/tuple/tuple_comparison.hpp> /*namespace boost { namespace tuples {*/ bool operator==(const boost::tuple<int>&

我打算为
boost::tuple

#include <iostream>
#include <vector>
#include <boost/tuple/tuple.hpp>
//#include <boost/tuple/tuple_comparison.hpp>

/*namespace boost { namespace tuples {*/
bool operator==(const boost::tuple<int>&, const boost::tuple<int>&){
  return false;    
}
/*}}*/

int main(){
  boost::tuple<int> t, u;      
  std::vector<boost::tuple<int> > vec;

  std::cout << (t == u); // [1]

  find(vec.begin(), vec.end(), t); // [2]
}
#包括
#包括
#包括
//#包括
/*名称空间boost{名称空间元组{*/
布尔运算符==(常量boost::tuple&,常量boost::tuple&){
返回false;
}
/*}}*/
int main(){
boost::元组t,u;
std::vec;

std::cout您应该包括一个附加文件:

#include "boost/tuple/tuple_comparison.hpp"
因为运算符是在单独的标题中定义的

它不在全局名称空间中查找的原因是由于ADL的规则,ADL只在
boost::tuples
名称空间(其中定义了元组)和
std
名称空间中查找


阅读更多信息

ADL
。当您在代码中仅使用
运算符==
时,将处理
名称空间boost::tuple
全局名称空间

但是,由于find只在std名称空间中,因此将处理
std
boost::tuples

请发布一个新的问题,如果您认为有帮助,请添加一个指向此问题的链接。嘿..您指向的链接说明并引用
算法(ADL)告诉编译器不仅要查看本地作用域,还要查看包含参数类型的名称空间。
…这里的自定义
运算符==
不是基本上在本地作用域中吗?还是我缺少了什么?@user1055604问题是失败发生在std::find的作用域中,而不是您自己的作用域中在这种情况下,它将只搜索boost和std名称空间。
#include "boost/tuple/tuple_comparison.hpp"