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