3998. Constants in std::regex_constants should be allowed to be enumerators

Section: 32.4 [re.const] Status: New Submitter: Jiang An Opened: 2023-10-18 Last modified: 2023-10-21 09:45:14 UTC

Priority: Not Prioritized

View all other issues in [re.const].

View all issues with New status.

Discussion:

Currently, MSVC STL and libc++ implement constants in std::regex_constants as enumerators of unscoped enumerations, while the standard specify them to be constexpr variables.

Casey Carter argued that it would be better to make these constants prvalues to avoid wasting space in object files. And presumably almost all users just use their values without odr-using them or relying on their value category.

Perhaps we should allow these constants to be enumerators of the corresponding type (syntax_option_type, match_flag_type, or error_type) if the corresponding type is an enumeration.

Notes: since C++20, we can even make the enumeration types scoped and expose the enumerators to the namespace by using-declaration or using-enum-declaration. P0439R0 might be related, since it changed former enumerators to constexpr variables.

Proposed resolution: