std::filesystem
enum classes overspecifiedSection: 31.12.8.2 [fs.enum.file.type], 31.12.8.3 [fs.enum.copy.opts], 31.12.8.6 [fs.enum.dir.opts] Status: C++17 Submitter: Richard Smith Opened: 2016-03-19 Last modified: 2021-06-06
Priority: 3
View all other issues in [fs.enum.file.type].
View all issues with C++17 status.
Discussion:
The enum class std::filesystem::file_type
specifies a collection of enumerators for describing the type of
a file, but also specifies (1) the numeric values of the enumerators, and (2) that an implementation cannot extend the
list with additional types known to it (and by extension, the standard cannot extend the list in future versions without
breakage).
These both seem like mistakes in the design. I would suggest we remove the specification of numerical values, and maybe also
we allow implementations to add new implementation-defined value
we replace std::filesystem::file_type::unknown
with a value that only
means "exists but type could not be determined" and use
implementation-specific values for other possibilities.
Similar overspecification exists for std::filesystem::copy_options
and
std::filesystem::directory_options
, where again precise numerical values are specified.
[2016-08 Chicago]
Wed AM: Move to Tentatively Ready
Proposed resolution:
Strike the "Value" column from:
[fs.enum.file_type], Table 145 Enum class file_type
31.12.8.3 [fs.enum.copy.opts], Table 146 Enum class copy_options
31.12.8.6 [fs.enum.dir.opts], Table 148 Enum class enum.directory_options
.
Change [fs.enum.file_type] Table 145 Enum class file_type
as indicated:
Constant Meaning none
The type of the file has not been determined or an error occurred while trying to determine the type. not_found
Pseudo-type indicating the file was not found. [ Note: The file not being found is not considered an error while determining the type of a file. —end note ] regular
Regular file directory
Directory file symlink
Symbolic link file block
Block special file character
Character special file fifo
FIFO or pipe file socket
Socket file implementation-
definedImplementations that support file systems having file types in addition to the above file_type types shall supply implementation-defined file_type
constants to separately identify each of those additional file typesunknown
The file does exist, but is of an operating system dependent type not covered by any of the other cases or the process does not have permission to query the file typeThe file exists but the type could not be determined