проверить равность макросовских входных данных? например дают $a:ident. $b:ident. при их равности появляются разные синтаксические ошибки. Я их пытаюсь отловить и выдать свою синтаксическую ошибку.
если написать такое
if stringify!($self_name) == stringify!($i) {
compile_error!(
.....
);
}
это не работает. он всегда кидает compile_error, бо это делается через if. а не через средства макросов.
как через макросы?
Для этого есть хак. Надо в макросе объявить макрос. macro_rules! fail_on_eq_idents { ($i1:ident, $i2:ident) => { macro_rules! hack { ($i1, $i1) => { compile_error!("...") }; ($i2, $i2) => { compile_error!("...") }; ($any1:ident, $any2:ident) => {} } hack!($i1, $i2); } }
Обсуждают сегодня