
Hi, I'm trying to use fs::wpath on Linux and I'm encountering some problems with internal conversion of wide strings to external representation. The problem can be demonstrated with the following code: #include <iostream> #include <boost/filesystem/path.hpp> #include <boost/filesystem/convenience.hpp> namespace fs = boost::filesystem; int main() { // Setting the global locale to be environment locale std::locale::global(std::locale("")); // Setting the wpath locale to be global fs::wpath_traits::imbue(std::locale()); fs::wpath mypath(L"/tmp/some/directory"); fs::create_directories(mypath); } To me, this work looks correct and should work. But it terminates with the following message: terminate called after throwing an instance of 'boost::filesystem::basic_filesystem_error< boost::filesystem::basic_path<std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, boost::filesystem::wpath_traits> >' what(): boost::filesystem::wpath::to_external conversion error Aborted At the same time, the following code works: #include <iostream> #include <boost/filesystem/path.hpp> #include <boost/filesystem/convenience.hpp> #include <libs/filesystem/src/utf8_codecvt_facet.hpp> namespace fs = boost::filesystem; int main() { fs::detail::utf8_codecvt_facet utf8_facet; std::locale loc( std::locale(), &utf8_facet ); fs::wpath_traits::imbue( loc ); fs::wpath mypath(L"/tmp/some/directory"); fs::create_directories(mypath); } which uses a UTF-8 facet from boost itself. The first example should work too - this is my understanding. Who is wrong here - me or boost?