These functions do work on Linux/Mac and I use them with the Boost.Filesystem API. It is similar to UTF8-CPP and NoWide but not as advanced. It’s more for easily converting between UTF-8 and the native wchar_t type.
Always treat std::string as a UTF-8 string
Use std::string internally for everything
Use wchar_t APIs on Windows whenever possible with widen
Convert from std::wstring (use narrow) when saving data to disk