|  | //@ revisions: edition2015 edition2018 | 
|  | //@[edition2015] check-pass | 
|  | //@[edition2015] edition: 2015 | 
|  | //@[edition2018] run-rustfix | 
|  | //@[edition2018] edition: 2018 | 
|  |  | 
|  | #![deny(unused_parens)] | 
|  |  | 
|  | #[allow(unused)] | 
|  | macro_rules! edition2015_only { | 
|  | () => { | 
|  | mod dyn { | 
|  | pub type IsAContextualKeywordIn2015 = (); | 
|  | } | 
|  |  | 
|  | pub type DynIsAContextualKeywordIn2015A = dyn::IsAContextualKeywordIn2015; | 
|  | } | 
|  | } | 
|  |  | 
|  | #[cfg(edition2015)] | 
|  | edition2015_only!(); | 
|  |  | 
|  | // there's a lint for 2018 and later only because of how dyn is parsed in edition 2015 | 
|  | //[edition2018]~v ERROR unnecessary parentheses around type | 
|  | pub type DynIsAContextualKeywordIn2015B = Box<dyn ::std::ops::Fn()>; | 
|  |  | 
|  | fn main() {} |