BOOST单元测试覆盖操作符<<

时间:2013-09-27 09:23:12

标签: c++ unit-testing boost

测试两个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)

有什么问题?

1 个答案:

答案 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?,其中有一个很好的解释。