测试两个std::pair
BOOST_CHECK_EQUAL(std::make_pair(0.0,0.0), std::make_pair(1.0,1.0));
我为operator<<
std::pair
std::ostream& operator<< (std::ostream& os, const std::pair<double,double>& t)
{
return os << "( " << t.first << ", " << t.second << ")";
}
有以下错误
error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const std::pair<_Ty1,_Ty2>' (or there is no acceptable conversion)
有什么问题?
答案 0 :(得分:1)
打开std namespace
,以便ADL可以找到它。
namespace std
{
ostream& operator<< (ostream& os, const pair<double,double>& t)
{
return os << "( " << t.first << ", " << t.second << ")";
}
}
好的,我明白了。名称查找停止,当它在当前名称空间中找到它要查找的名称时,这就是为什么它在全局范围内找不到您的operator<<
,因为它已找到operator<<
namespace boost
因为提升声明了operator<<
。
我建议阅读Why can't I instantiate operator<<(ostream&, vector&) with T=vector?,其中有一个很好的解释。