Это обратная "совместимость" того факта, что dyn
является контекстным ключевым словом. Перед добавлением нового синтаксиса вы можете написать этот код, который использует dyn
в качестве имени модуля:
mod dyn {
pub trait Error {}
}
fn example() -> Box<dyn ::Error> {
// ^ space doesn't matter
unimplemented!()
}
Этот не может остановить компиляцию, поэтому он должен быть проанализирован как компонент пути.
Вы можете добавить круглые скобки, чтобы быть явным:
fn example() -> Box<dyn (::dyn::Error)> { /* ... */ }
В выпуске 2018 года вы можете использовать crate
в начале пути:
fn example() -> Box<dyn crate::dyn::Error> { /* ... */ }