ctype_base
are not yet required to be usable in constant expressionsSection: 28.3.4.2.1 [category.ctype.general] Status: WP Submitter: Jiang An Opened: 2024-01-12 Last modified: 2024-04-02
Priority: Not Prioritized
View all issues with WP status.
Discussion:
It may be desired that static data members ctype_base
are "real constants", i.e. usable in constant expressions.
However, this is not strictly required because mask
is only required to be a bitmask type that can be a class type,
which makes the plain const
potentially insufficient.
[2024-03-12; Reflector poll]
Set status to Tentatively Ready after five votes in favour during reflector poll.
[Tokyo 2024-03-23; Status changed: Voting → WP.]
Proposed resolution:
This wording is relative to N4971.
Modify 28.3.4.2.1 [category.ctype.general] as indicated:
namespace std { class ctype_base { public: using mask = see below; // numeric values are for exposition only. static constexpr mask space = 1 << 0; static constexpr mask print = 1 << 1; static constexpr mask cntrl = 1 << 2; static constexpr mask upper = 1 << 3; static constexpr mask lower = 1 << 4; static constexpr mask alpha = 1 << 5; static constexpr mask digit = 1 << 6; static constexpr mask punct = 1 << 7; static constexpr mask xdigit = 1 << 8; static constexpr mask blank = 1 << 9; static constexpr mask alnum = alpha | digit; static constexpr mask graph = alnum | punct; }; }-1- The type
mask
is a bitmask type (16.3.3.3.3 [bitmask.types]).