2018-Specific Changes
The following is a summary of changes that only apply to code compiled with the 2018 edition compared to the 2015 edition.
- Non-lexical lifetimes (future inclusion planned for 2015 edition)
- At most once ?macro repetition operator.
- Path changes:
- Paths in usedeclarations work the same as other paths.
- Paths starting with ::must be followed with an external crate.
- Paths in pub(in path)visibility modifiers must start withcrate,self, orsuper.
 
- Paths in 
- Anonymous trait function parameters are not allowed.
- Trait function parameters may use any irrefutable pattern when the function has a body.
 
- dynis a strict keyword, in 2015 it is a weak keyword.
- async,- await, and- tryare reserved keywords.
- The following lints are now deny by default:
Cargo
- If there is a target definition in a Cargo.tomlmanifest, it no longer automatically disables automatic discovery of other targets.
- Target paths of the form src/{target_name}.rsare no longer inferred for targets where thepathfield is not set.
- cargo installfor the current directory is no longer allowed, you must specify- cargo install --path .to install the current package.