|
Boost Users : |
From: Sean Rohead (sean.rohead_at_[hidden])
Date: 2005-11-11 11:30:25
I am using the Boost Unit Test library and have code that uses the
BOOST_CHECK_EQUAL macro with std::wstring instances. I get a
compilation error when I do this because there is no operator<< defined
for a narrow ostream and a wide string. So, I created one as shown
below, but I am still getting the exact same compilation error (using
MSVC 2003). With my new operators, I am able to manually insert wide
strings into a narrow ostream, but the BOOST_CHECK_EQUAL macro expansion
still doesn't seem to be picking it up. Any ideas?
Thanks,
Sean Rohead
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#include <string>
#include <iostream>
std::wstring widen(const std::string& source)
{
std::wstring result(source.size(), wchar_t(0));
typedef std::ctype<wchar_t> ctype_t;
const ctype_t& ct = std::use_facet<ctype_t>(std::locale());
ct.widen(source.data(), source.data() + source.size(),
&(*result.begin()));
return result;
}
std::string narrow(std::wstring source)
{
std::string result(source.size(), char(0));
typedef std::ctype<wchar_t> ctype_t;
const ctype_t& ct = std::use_facet<ctype_t>(std::locale());
ct.narrow(source.data(), source.data() + source.size(), '\u00B6',
&(*result.begin()));
return result;
}
std::ostream& operator<<(std::ostream& out, const std::wstring& value)
{
out << narrow(value);
return out;
}
std::wostream& operator<<(std::wostream& out, const std::string& value)
{
out << widen(value);
return out;
}
#include <boost/test/unit_test.hpp>
void main()
{
std::string message("message");
std::wstring wmessage(L"MESSAGE");
// THESE TWO LINES COMPILE AND WORK FINE
std::wcout << message << std::endl;
std::cout << wmessage << std::endl;
// THIS LINE STILL DOES NOT COMPILE
BOOST_CHECK_EQUAL(wmessage, std::wstring(L"message"));
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
------ Build started: Project: boost, Configuration: Debug Win32 ------
Compiling...
main.cpp
c:\lib\boost_1_32_0\boost\test\test_tools.hpp(207) : error C2679: binary
'<<' : no operator found which takes a right-hand operand of type 'const
std::wstring' (or there is no acceptable conversion)
c:\lib\boost_1_32_0\boost\test\test_tools.hpp(206) : while
compiling class-template member function 'void
boost::test_tools::tt_detail::print_log_value<T>::operator
()(std::ostream &,const T &)'
with
[
T=std::wstring
]
c:\lib\boost_1_32_0\boost\test\test_tools.hpp(251) : see
reference to class template instantiation
'boost::test_tools::tt_detail::print_log_value<T>' being compiled
with
[
T=std::wstring
]
c:\lib\boost_1_32_0\boost\test\detail\wrap_stringstream.hpp(69)
: see reference to function template instantiation 'std::ostream
&boost::test_tools::tt_detail::operator <<<Left>(std::ostream &,const
boost::test_tools::tt_detail::print_helper<T> &)' being compiled
with
[
Left=std::wstring,
T=std::wstring
]
c:\lib\boost_1_32_0\boost\test\test_tools.hpp(438) : see
reference to function template instantiation
'boost::basic_wrap_stringstream<CharT> &boost::operator
<<<char,boost::test_tools::tt_detail::print_helper<T>>(boost::basic_wrap
_stringstream<CharT> &,const
boost::test_tools::tt_detail::print_helper<T> &)' being compiled
with
[
CharT=char,
T=std::wstring
]
c:\Documents and Settings\sean.rohead\My Documents\Visual Studio
Projects\boost\main.cpp(43) : see reference to function template
instantiation 'bool
boost::test_tools::tt_detail::equal_and_continue_impl<std::wstring,std::
basic_string<_Elem,_Traits,_Ax>>(const Left &,const Right
&,boost::wrap_stringstream
&,boost::test_tools::const_string,size_t,boost::unit_test::log_level,siz
e_t)' being compiled
with
[
_Elem=wchar_t,
_Traits=std::char_traits<wchar_t>,
_Ax=std::allocator<wchar_t>,
Left=std::wstring,
Right=std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator
<wchar_t>>
]
Build log was saved at "file://c:\Documents and Settings\sean.rohead\My
Documents\Visual Studio Projects\boost\Debug\BuildLog.htm"
boost - 1 error(s), 0 warning(s)
---------------------- Done ----------------------
Build: 0 succeeded, 1 failed, 0 skipped
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net