谷歌测试EXPECT_EQ和boost :: make_recursive_variant

时间:2011-03-27 12:37:33

标签: c++ googletest boost-variant

我有一个提升递归变量,如下所示。当我使用assert比较两个递归变体对象时,它工作正常但是使用EXPECT_EQ时,它会产生编译错误。

typedef boost::make_recursive_variant<bool, boost::uint8_t, boost::uint32_t,
    boost::int32_t, double, std::string, boost::uuids::uuid>::type rvariant_type;

variant_type b1 = true;
rvariant_type b2 = true;

assert(b1 == b2);  //work fine

EXPECT_EQ(b1,b2); //gives compiler error.
EXPECT_EQ(boost::get<bool>(b1), boost::get<bool>(b2)); //works fine

boost / v1.46.1 / include / boost / variant / detail / variant_io.hpp:64:错误:不匹配'运算符&lt;&lt;'在'((const boost :: detail :: variant :: printer&gt ;&gt; *)this) - &gt; boost :: detail :: variant :: printer&gt; &gt; :: out_&lt;&lt;操作数”

1 个答案:

答案 0 :(得分:1)

gtest大量使用流来输出,但似乎boost :: variant支持通过重载运算符进行打印&lt;&lt;非常有限,如果不是非光的话。

看看这个:

#include <boost/variant.hpp>
#include <boost/cstdint.hpp>
#include <boost/uuid/uuid.hpp>
#include <iostream>
typedef boost::make_recursive_variant<bool, boost::uint8_t, boost::uint32_t,
    boost::int32_t, double, std::string, boost::uuids::uuid>::type rvariant_type;

int main() {
  rvariant_type v1 = true;
  std::cout << v1 << std::endl;
  return 0;
}

这个非常短的程序会产生与gtest相同的编译错误。

用这个补充:

std::ostream& operator<<(std::ostream& out, const rvariant_type& p) {
  return out << boost::get<bool>(p);
}

让我的测试编译,我会看看我是否也可以使你的例子工作。

更新:我刚刚编译并成功运行了一个基于您的代码的测试,在放上上面提到的运算符&lt;&lt;,因此缺少运算符&lt;&lt;正是造成它的原因。