Я фильтрую кортеж во время компиляции, я хочу вывести собственное сообщение об ошибке, если кортеж пуст или если кортеж содержит более одного элемента.Несколько static_assert, которые зависят от того же значения
static_assert
кажется слишком сложным, потому что мне нужно использовать логическую логику.
static_assert(size != 0 || size >= 1, "Empty");
static_assert(size == 1 || size == 0, "More than 1");
Я не думаю, что что-то подобное возможно?
static_if(size == 0) compile_err("Empty");
static_if(size > 1) compile_err("More than 1");
Нужна ли более новая версия C++ альтернативой static_assert?
Зачем вам нужна более сложная логика с помощью 'static_assert'? Реверсирование двух условий static_if должно работать одинаково. В первом 'static_assert' у вас есть, если предположить тип unsigned,' size ≠ 0 ⇔ size ≥ 1', поэтому один из них является избыточным. – chris
'static_assert (size! = 0,« Не должно быть пустым »)' и 'static_assert (размер <= 1,« Слишком много »)' кажутся тем, что вы хотите. –
@MatsPetersson Вы правы, я не уверен, почему я не написал его, как вы. Я думаю, я, должно быть, был смущен тем, что 'false' запускает assert, а не' true'. –