2712. copy_file(from, to, ...) has a number of unspecified error conditions

Section: 31.12.13.5 [fs.op.copy.file] Status: C++17 Submitter: Eric Fiselier Opened: 2016-05-10 Last modified: 2021-06-06

Priority: 2

View all other issues in [fs.op.copy.file].

View all issues with C++17 status.

Discussion:

There are a number of error cases that copy_file(from, to, ...) does not take into account. Specifically the cases where:

  1. from does not exist
  2. from is not a regular file
  3. to exists and is not a regular file

These error cases should be specified as such.

[2016-05 Issues Telecon]

Eric to provide wording.

[2016-05-28, Eric Fiselier provides wording]

[2016-08 Chicago]

Wed AM: Move to Tentatively Ready

Proposed resolution:

This wording is relative to N4582.

  1. Modify [fs.op.copy_file] as indicated:

    bool copy_file(const path& from, const path& to, copy_options options);
    bool copy_file(const path& from, const path& to, copy_options options,
                   error_code& ec) noexcept;
    

    -3- Requires: At most one constant from each copy_options option group (27.10.10.2) is present in options.

    -4- Effects: Report a file already exists error as specified in Error reporting (27.5.6.5) if:

    • !is_regular_file(from), or
    • exists(to) and !is_regular_file(to), or
    • exists(to) and equivalent(from, to), or
    • exists(to) and (options & (copy_options::skip_existing | copy_options::overwrite_existing | copy_options::update_existing)) == copy_options::none.