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

            Bug ID: 113246
           Summary: Behavior of std::filesystem::weakly_canonical with
                    non-existing relative paths
           Product: gcc
           Version: 13.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: davidepesa at gmail dot com
  Target Milestone: ---

I initially reported this as a Boost.Filesystem issue
(https://github.com/boostorg/filesystem/issues/300), but std::filesystem in
libstdc++ has the same behavior.

With -std=c++17, weakly_canonical("foo/bar") returns "foo/bar" when "foo" does
not exist in the current working directory.

Conversely, when at least one leading element of the input path exists, the
returned path is absolute, e.g., weakly_canonical("existing/foo/bar") ==
"/home/existing/foo/bar".

It's not clear to me how to interpret the standard wording
(https://eel.is/c++draft/fs.op.weakly.canonical#1) in this case. It says:

> return a path composed by operator/= from the result of calling canonical() 
> with a path argument composed of the leading elements of p that exist, if 
> any, ...

If there are no leading elements of p that exist, should canonical() be called
with an empty path? or should it not be called at all? (if it's the former,
note that canonical("") currently throws a filesystem_error)

Reply via email to