This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++20 status.

### 2851. `std::filesystem` enum classes are now underspecified

Section: 29.12.8.2 [fs.enum.file.type], 29.12.8.3 [fs.enum.copy.opts], 29.12.8.6 [fs.enum.dir.opts] Status: C++20 Submitter: Tim Song Opened: 2016-12-18 Last modified: 2021-06-06

Priority: 2

View all other issues in [fs.enum.file.type].

View all issues with C++20 status.

Discussion:

LWG 2678 stripped the numerical values of the enumerators from three enum classes in 29.12.8 [fs.enum]; in doing so it also removed the implicit specification 1) of the bitmask elements for the two bitmask types (`copy_options` and `directory_options`) and 2) that the `file_type` constants are distinct.

[2017-01-27 Telecon]

Priority 2; Jonathan to work with Tim to tweak wording.

[2018-01-16, Jonathan comments]

I no longer remember what I didn't like about Tim's P/R so I think we should accept the original P/R.

[2018-1-26 issues processing telecon]

Status to 'Tentatively Ready'

[2018-3-17 Adopted in Jacksonville]

Proposed resolution:

This wording is relative to N4713.

1. Edit [fs.enum.file_type]/1 as indicated:

   > This enum class specifies constants used to identify file types, with the meanings listed in Table 123. The values of the constants are distinct.

2. Edit 29.12.8.3 [fs.enum.copy.opts]/1 as indicated:

   > The `enum class` type `copy_options` is a bitmask type (16.3.3.3.4 [bitmask.types]) that specifies bitmask constants used to control the semantics of copy operations. The constants are specified in option groups with the meanings listed in Table 124. The constant `none` represents the empty bitmask, and Constant `none` is shown in each option group for purposes of exposition; implementations shall provide only a single definition. Every other constant in the table represents a distinct bitmask element. Calling a library function with more than a single constant for an option group results in undefined behavior.

3. Edit 29.12.8.6 [fs.enum.dir.opts]/1 as indicated:

   > The `enum class` type `directory_options` is a bitmask type (16.3.3.3.4 [bitmask.types]) that specifies bitmask constants used to identify directory traversal options, with the meanings listed in Table 127. The constant `none` represents the empty bitmask; every other constant in the table represents a distinct bitmask element.