boostorg / core

Boost Core Utilities
133 stars 83 forks source link

LWT should support wide strings in BOOST_TEST_EQ #87

Open pdimov opened 3 years ago

pdimov commented 3 years ago

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.

Lastique commented 3 years ago

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 commented 3 years ago

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.