google test EXPECT_EQ и boost :: make_recursive_variant - PullRequest
0 голосов
/ 27 марта 2011

У меня есть рекурсивный вариант наддува, как показано ниже.Когда я сравниваю два рекурсивных варианта объекта, используя assert, он работает нормально, но с EXPECT_EQ, он выдает ошибку компиляции.: ошибка: нет совпадения для 'operator <<' in '((const boost :: detail :: option :: printer>> *) this) -> boost :: detail :: option :: printer>> :: out_ <<операнд '</p>

1 Ответ

1 голос
/ 28 марта 2011

gtest интенсивно использует потоки для вывода, но кажется, что поддержка boost :: variable для печати через перегруженный оператор << очень ограничена, если не существует. </p>

Взгляните на это:

#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);
}

делает мою тестовую компиляцию, я посмотрю, смогу ли я заставить ваш пример работать.

ОБНОВЛЕНИЕ: Я только что скомпилировал и успешно выполнил тест на основе вашего кода после помещения вышеупомянутого оператора <<, поэтому отсутствие оператора << именно то, что его вызывало. </p>

...