Use C++20 concepts to require constraints on template parameters (#1977)

This commit is contained in:
Rangi
2026-05-22 17:54:34 -04:00
committed by GitHub
parent 728bed39d5
commit dce14fd4b8
12 changed files with 64 additions and 27 deletions
+6 -6
View File
@@ -30,7 +30,7 @@ struct WarningState {
std::pair<WarningState, std::optional<uint32_t>> getInitialWarningState(std::string &flag);
template<typename LevelEnumT>
template<Enum LevelEnumT>
struct WarningFlag {
char const *name;
LevelEnumT level;
@@ -38,14 +38,14 @@ struct WarningFlag {
enum WarningBehavior { DISABLED, ENABLED, ERROR };
template<typename WarningEnumT>
template<Enum WarningEnumT>
struct ParamWarning {
WarningEnumT firstID;
WarningEnumT lastID;
uint8_t defaultLevel;
};
template<typename WarningEnumT>
template<Enum WarningEnumT>
struct DiagnosticsState {
WarningState flagStates[WarningEnumT::NB_WARNINGS];
WarningState metaStates[WarningEnumT::NB_WARNINGS];
@@ -53,7 +53,7 @@ struct DiagnosticsState {
bool warningsAreErrors = false;
};
template<typename LevelEnumT, typename WarningEnumT>
template<Enum LevelEnumT, Enum WarningEnumT>
struct Diagnostics {
std::vector<WarningFlag<LevelEnumT>> metaWarnings;
std::vector<WarningFlag<LevelEnumT>> warningFlags;
@@ -71,7 +71,7 @@ struct Diagnostics {
void processWarningFlag(char const *flag);
};
template<typename LevelEnumT, typename WarningEnumT>
template<Enum LevelEnumT, Enum WarningEnumT>
WarningBehavior Diagnostics<LevelEnumT, WarningEnumT>::getWarningBehavior(WarningEnumT id) const {
// Check if warnings are globally disabled
if (!state.warningsEnabled) {
@@ -120,7 +120,7 @@ WarningBehavior Diagnostics<LevelEnumT, WarningEnumT>::getWarningBehavior(Warnin
return WarningBehavior::DISABLED;
}
template<typename LevelEnumT, typename WarningEnumT>
template<Enum LevelEnumT, Enum WarningEnumT>
void Diagnostics<LevelEnumT, WarningEnumT>::processWarningFlag(char const *flag) {
std::string rootFlag = flag;