[Bug libstdc++/106028] New: std::filesystem::path lacks conversion to native mbs

goughostt at gmail dot com gcc-bugzilla@gcc.gnu.org
Sun Jun 19 06:26:11 GMT 2022


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106028

            Bug ID: 106028
           Summary: std::filesystem::path lacks conversion to native mbs
           Product: gcc
           Version: 12.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: goughostt at gmail dot com
  Target Milestone: ---

The following assumes c++17 std.

With Windows (mingw): a path can be build with UTF-8 (`u8path`) or native mbs
(`path(const char*)`) and converted to UTF-8 string (`path.string()` and
`path.u8string()`).
It seems impossible to get a native mbs string back (easily).

I suggest `path.string()` to return the native mbs string instead.
That allows one to `printf` the path in Windows.
Otherwise, I cannot find an easy way (without explicit encoding conversion) for
a mingw cross-compiled binary to print paths to the Cmd console.

As I understand, the suggested change conforms to the standard.
And developers also noted this in the code (XXX):

      if (__str_codecvt_out_all(__wfirst, __wlast, __u8str, __cvt)) {
      if constexpr (is_same_v<_CharT, char>)
        return __u8str; // XXX assumes native ordinary encoding is UTF-8.
      else {


More information about the Gcc-bugs mailing list