標準では、整数型、enum、およびから選択できますstd::bitset。
これらの選択肢を考えると、なぜライブラリの実装者は一方を他方よりも優先して使用するのでしょうか?
適切な例として、llvm の libcxx は、これらの実装オプションの (少なくとも) 2 つの組み合わせを使用しているようです。
ctype_base::mask整数型を使用して実装されます。
<__locale>
regex_constants::syntax_option_typeenum+ オーバーロード
された演算子を使用して実装されます。<regex>
gcc プロジェクトの libstdc++ は3 つすべてを使用します。
ios_base::fmtflags列挙型 + オーバーロードされた演算子を使用して実装されます。<bits/ios_base.h>
regex_constants::syntax_option_type整数型を使用して
実装され、
Bothregex_constants::match_flag_typeを使用して実装されます。std::bitset<bits/regex_constants.h>
私の知る限り、gdbはこれら3つの選択肢のいずれのビットフィールドネスも「検出」できないため、強化されたデバッグとの違いはありません。
enum解と整数型の解は、常に同じスペースを使用する必要があります。std::bitsetを保証するものではないようですsizeof(std::bitset<32>) == std::uint32_tので、何が特に魅力的なのかわかりませんstd::bitset。
マスクのenum組み合わせは列挙子を生成しないため、解決策は型の安全性がわずかに低いようです。
厳密に言えば、上記はn3376に関するものであり、FDIS に関するものではありません (私は FDIS にアクセスできないため)。
この分野で利用可能な啓発をいただければ幸いです。