core icon indicating copy to clipboard operation
core copied to clipboard

LWT should support wide strings in BOOST_TEST_EQ

Open pdimov opened this issue 4 years ago • 2 comments

Outputting wide strings to std::cout outputs the void* under C++ before 20, and hits a deleted op<< in C++20. We should make it work, either by transcoding to UTF-8, or by using the codecvt facet of the output stream.

This might entail adding an adapter such as boost::core::narrow(x) that is similar to quoted(x) in that when output to a stream, it does the necessary narrowing using codecvt. (We can't add it to io because Core is not allowed to depend on Io.)

Related: we don't have a wide equivalent of BOOST_TEST_CSTR_EQ.

pdimov avatar Mar 10 '21 22:03 pdimov

We should make it work, either by transcoding to UTF-8, or by using the codecvt facet of the output stream.

I have something like this in Boost.Log:

https://github.com/boostorg/log/blob/8a880720be5a990fdd0f864244bfff1a39a69d83/include/boost/log/utility/formatting_ostream.hpp#L398-L416 https://github.com/boostorg/log/blob/8a880720be5a990fdd0f864244bfff1a39a69d83/src/code_conversion.cpp#L68-L139

I'm not sure we want that particular solution, instead of just outputting to std::wcout.

Lastique avatar Mar 11 '21 10:03 Lastique

We can't add it to io because Core is not allowed to depend on Io.

I don't like that we're adding stuff to Core just because we don't want to add it to the module where it really belongs. Code reuse must work, however modular we want to be.

Lastique avatar Mar 11 '21 10:03 Lastique