I can't seem to get BOOST_CHECK_EQUAL with std::type_info
instances to compile with g++,
version (GCC) 4.1.2 20070925 (Red Hat 4.1.2-33)
Here's a simple test case:
------------------
#include <iostream>
#include <typeinfo>
#define BOOST_TEST_MAIN
#include
std::ostream &
operator<<(std::ostream &out, const std::type_info &info) {
return out << info.name();
}
BOOST_AUTO_TEST_CASE(Foo) {
std::cout << "Typeid of int is " << typeid(int) << "\n";
BOOST_CHECK_EQUAL(typeid(int), typeid(float));
}
------------------
g++ complains that there isn't an operator<< for type_info
in the BOOST_CHECK_EQUAL, even though it is used just fine
on the previous line.
Output:
g++ -o ti ti.cpp
/usr/include/boost/test/test_tools.hpp: In member function ‘void
boost::test_tools::tt_detail::print_log_value<T>::operator()(std::ostream&,
const T&) [with T = std::type_info]’:
/usr/include/boost/test/test_tools.hpp:404: instantiated from
‘std::ostream& boost::test_tools::tt_detail::operator<<(std::ostream&,
const boost::test_tools::tt_detail::print_helper_t<T>&) [with T =
std::type_info]’
/usr/include/boost/test/utils/wrap_stringstream.hpp:66: instantiated
from ‘boost::basic_wrap_stringstream<CharT>&
boost::operator<<(boost::basic_wrap_stringstream<CharT>&, const T&) [with
CharT = char, T =
boost::test_tools::tt_detail::print_helper_tstd::type_info]’
/usr/include/boost/test/test_tools.hpp:460: instantiated from ‘void
boost::test_tools::tt_detail::check_frwd(Pred, boost::wrap_stringstream&,
boost::test_tools::const_string, size_t,
boost::test_tools::tt_detail::tool_level,
boost::test_tools::tt_detail::check_type, const Arg0&, const char*, const
Arg1&, const char*) [with Pred =
boost::test_tools::tt_detail::equal_impl_frwd, Arg0 = std::type_info, Arg1
= std::type_info]’
ti.cpp:14: instantiated from here
/usr/include/boost/test/test_tools.hpp:298: error: no match for
‘operator<<’ in ‘ostr << t’
Anyone know why this is?
--
Paul S. Strauss pss@acm.org