Cuando se intenta hacer un BOOST_CHECK_EQUAL (par, par), gcc no encuentra el operador de la ruta para el par, a pesar de declararlo. Lo curioso es que std :: out encuentra al operador.BOOST_CHECK_EQUAL con el par <int, int> y el operador personalizado <<
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);
}
ésto no compila con el error:
... instantiated from here
../boost-atp/release/include/boost/test/test_tools.hpp:326:9: error: no match for ‘operator<<’ in ‘ostr << t’
La nueva forma de definir * * su propia impresión de tipos personalizados se explica aquí: https://stackoverflow.com/a/44810846/1617295, y [esto es la documentación oficial] (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) de esa función. – Raffi
@ Raffi Esa pregunta parece un duplicado de esta, tiene menos detalles. Tal vez tiene sentido marcarlo como duplicado y mover su respuesta aquí para que no hagamos que los usuarios salten. Puedo aceptarlo también ¡Gracias! – nishantjr