При попытке выполнить BOOST_CHECK_EQUAL (пара, пара) gcc не находит оператора потока для пары, что бы его не объявить. Самое смешное, что std :: out находит оператора.BOOST_CHECK_EQUAL с парой <int, int> и пользовательским оператором <<
ostream& operator<<(ostream& s, const pair<int,int>& p) {
s << '<' << p.first << ',' << p.second << '>';
return s;
}
BOOST_AUTO_TEST_CASE(works)
{
pair<int,int> expected(5, 5);
pair<int,int> actual (5, 5);
std::cout << expected << std::endl;
std::cout << actual << std::endl;
BOOST_CHECK(actual == expected);
}
BOOST_AUTO_TEST_CASE(no_work)
{
pair<int,int> expected(5, 5);
pair<int,int> actual (5, 5);
BOOST_CHECK_EQUAL(actual, expected);
}
Это оленья кожа компиляции с ошибкой:
... instantiated from here
../boost-atp/release/include/boost/test/test_tools.hpp:326:9: error: no match for ‘operator<<’ in ‘ostr << t’
The * новый * способ определения собственной печати пользовательских типов объясняются здесь: https://stackoverflow.com/a/44810846/1617295, и [это официальную документацию] (http://www.boost.org/doc/libs/1_66_0/libs/test/doc/html/boost_test/test_output/test_tools_support_for_logging/testing_tool_output_disable.html) этой функции. – Raffi
@ Raffi Этот вопрос выглядит как дубликат этого, имеет меньше деталей. Может быть, имеет смысл отметить это как дубликат и переместить свой ответ здесь, чтобы мы не заставляли пользователей прыгать? Я тоже могу это принять. Благодаря! – nishantjr