Информация об изменениях

Сообщение Re[16]: enum class and if expression от 20.12.2019 10:26

Изменено 20.12.2019 10:32 B0FEE664

Re[16]: enum class and if expression
Здравствуйте, rg45, Вы писали:

R>
R>enum class EE {
R>    a, b, c, d
R>};
R>using EE_sequence = std::integer_sequence<EE, EE::a, EE::b, EE::c, EE::d>;

R>static_assert(EE::a == min_element<EE_sequence>::value);
R>


Проблема этого кода в том, что EE не зависит от EE_sequence, а потому добавление нового значения в EE приводит к необнаружимой ошибке:

enum class EE {
    a, b, c, d, e = -1
};
using EE_sequence = std::integer_sequence<EE, EE::a, EE::b, EE::c, EE::d>;

static_assert(EE::a == min_element<EE_sequence>::value);
Re[16]: enum class and if expression
Здравствуйте, rg45, Вы писали:

R>
R>enum class EE {
R>    a, b, c, d
R>};
R>using EE_sequence = std::integer_sequence<EE, EE::a, EE::b, EE::c, EE::d>;

R>static_assert(EE::a == min_element<EE_sequence>::value);
R>


Проблема этого кода в том, что EE не зависит от EE_sequence, а потому добавление нового значения в EE приводит к необнаружимой ошибке:

enum class EE {
    a, b, c, d, e = -1
};
using EE_sequence = std::integer_sequence<EE, EE::a, EE::b, EE::c, EE::d>;

static_assert(EE::a == min_element<EE_sequence>::value);


А теперь представте, что EE используется для: конвертации в индекс массива функций обработки сообщений, конвертации в строку для лога и конвертацию в int для id сообщения — все эти последовательности придётся править руками при добавлении нового значения в EE.