@iihaarr

Можно ли вызвать ошибку времени компиляции в макросе?

Допустим есть такой макрос:
macro_rules! macr {
($var:expr) => {
if $var == 5 {
compile error
}
}
}

Как при каком-то значении var вызвать ошибку времени компиляции?
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
vabka
@vabka
Токсичный шарпист
Ну if ты не можешь туда впихнуть, но ты можешь сделать что-то типа
macro_rules! macro {
 (5) => {compile_error! ("5 is unacceptable")}
}

https://doc.rust-lang.org/std/macro.compile_error.html

Делать какие-то сложные проверки с условиями ты в декларативных макросах не можешь.
Например ты не можешь вычислить значение выражения. И не можешь убедиться, что это значение константное.
Так что иногда придётся делать динамические проверки, добавляя всякие if-ы и assert-ы
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы