mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-03 22:49:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			33 lines
		
	
	
		
			797 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			797 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
// check-pass
 | 
						|
 | 
						|
#![feature(inline_const)]
 | 
						|
 | 
						|
// This used to be unsupported since the parser first tries to check if we have
 | 
						|
// any nested items, and then checks for statements (and expressions). The heuristic
 | 
						|
// that we were using to detect the beginning of a const item was incorrect, so
 | 
						|
// this used to fail.
 | 
						|
macro_rules! m {
 | 
						|
    ($b:block) => {
 | 
						|
        fn foo() {
 | 
						|
            const $b
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
// This has worked since inline-consts were implemented, since the position that
 | 
						|
// the const block is located at doesn't support nested items (e.g. because
 | 
						|
// `let x = const X: u32 = 1;` is invalid), so there's no ambiguity parsing the
 | 
						|
// inline const.
 | 
						|
macro_rules! m2 {
 | 
						|
    ($b:block) => {
 | 
						|
        fn foo2() {
 | 
						|
            let _ = const $b;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
m!({});
 | 
						|
m2!({});
 | 
						|
 | 
						|
fn main() {}
 |