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

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |INVALID

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
The semantics of exists(const path&, error_code&) are precisely specified, and
I think this behaviour is correct according to the specification. This is also
consistent with Boost.Filesystem.

(In reply to Martin Ejdestig from comment #0)
> Which means it is not possible to discern between an error and when the file
> does not exist without examining error_code.value(), which is platform
> dependent.

Just compare to the platform independent enumerator:

#include <experimental/filesystem>
#include <iostream>

int main()
{
  std::error_code error_code;
  bool exists = std::experimental::filesystem::exists("does_not_exist",
error_code);

  std::cout << "exists: " << exists << '\n';
  std::cout << "an error happened: "
    << (error_code != std::errc::no_such_file_or_directory) << '\n';
}


I'll discuss with the C++ committee whether this behaviour is really desirable,
but it seems to be what the spec requires, and not a bug in GCC.

Reply via email to