Open pdimov opened 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
.
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.
Outputting wide strings to
std::cout
outputs thevoid*
under C++ before 20, and hits a deletedop<<
in C++20. We should make it work, either by transcoding to UTF-8, or by using thecodecvt
facet of the output stream.This might entail adding an adapter such as
boost::core::narrow(x)
that is similar toquoted(x)
in that when output to a stream, it does the necessary narrowing usingcodecvt
. (We can't add it toio
because Core is not allowed to depend on Io.)Related: we don't have a wide equivalent of
BOOST_TEST_CSTR_EQ
.