[Boost-bugs] [Boost C++ Libraries] #9390: Incomplete BOOST_TEST_DONT_PRINT_LOG_VALUE

Subject: [Boost-bugs] [Boost C++ Libraries] #9390: Incomplete BOOST_TEST_DONT_PRINT_LOG_VALUE
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2013-11-14 16:07:57


#9390: Incomplete BOOST_TEST_DONT_PRINT_LOG_VALUE
---------------------------------------+------------------------------
 Reporter: Marek Kurdej <curdeius@…> | Type: Bugs
   Status: new | Milestone: To Be Determined
Component: None | Version: Boost 1.55.0
 Severity: Problem | Keywords:
---------------------------------------+------------------------------
 When we use a user-defined error without overloaded
 ```operator<<(std::ostream&, T const&)```, we have to use
 BOOST_TEST_DONT_PRINT_LOG_VALUE in order to prevent UTF to print output to
 log.

 BOOST_TEST_DONT_PRINT_LOG_VALUE works correctly only if you use macros
 like BOOST_CHECK_EQUAL.

 However, BOOST_CHECK_EQUAL_COLLECTIONS provokes compile-time error.
 For instance, on MSVC2010 (Windows x64), the error message is:
 {{{
 compile-time error C2679: binary '<<' : no operator found which takes a
 right-hand operand of type 'const MyClass' (or there is no acceptable
 conversion) c:\lib\Boost\include\boost-
 1_54\boost\test\utils\wrap_stringstream.hpp 66
 }}}.

 The problem is that ```BOOST_CHECK_EQUAL_COLLECTIONS`` uses ```operator<<(
 basic_wrap_stringstream<CharT>& targ, T const& t )``` from
 wrap_stringstream.hpp, whereas BOOST_CHECK_EQUAL uses
 ```print_log_value::operator()( std::ostream& ostr, T const& t )``` from
 test_tools.hpp.

 BOOST_TEST_DONT_PRINT_LOG_VALUE only specializes the latter.

 The solution is to partially specialize the former template as well.

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/9390>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:14 UTC