При попытке оценить оператор запятой с static_assert
в качестве аргумента компиляции не удаетсяComma оператор с static_assert()
void fvoid() {}
int main() {
int a = (1, 2); // a=2
int b = (fvoid(), 3); // b=3
int d = (, 5);
// ^
// error: expected primary-expression before ',' token. OK
int c = (static_assert(true), 4);
// ^~~~~~~~~~~~~
// error: expected primary-expression before 'static_assert'. Why?
}
Похоже, что static_assert()
даже не постановляет void
после компиляции. Мне не удалось найти что-либо по этому поводу в стандарте. Есть ли способ использовать его с помощью оператора запятой или использовать его в соответствии с другим выражением (без точки с запятой)?
Просто любопытно: почему вы хотите использовать его с оператором запятая? – Rakete1111
@ Rakete1111 в некотором состоянии макрос, который обычно возвращает значение, должен терпеть статическое утверждение, но все же он должен быть разрешен к значению, поэтому компилятор не генерирует избыточные ошибки. – teivaz
Имеет смысл, и вы можете захотеть изменить название, так как это совсем другой вопрос, который не имеет никакого отношения к вашему актуальному вопросу. – Rakete1111