mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-30 20:44:34 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			38 lines
		
	
	
		
			787 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			787 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // check that dropck does the right thing with misc. Ty variants
 | |
| 
 | |
| use std::fmt;
 | |
| struct NoisyDrop<T: fmt::Debug>(T);
 | |
| impl<T: fmt::Debug> Drop for NoisyDrop<T> {
 | |
|     fn drop(&mut self) {
 | |
|         let _ = vec!["0wned"];
 | |
|         println!("dropping {:?}", self.0)
 | |
|     }
 | |
| }
 | |
| 
 | |
| trait Associator {
 | |
|     type As;
 | |
| }
 | |
| impl<T: fmt::Debug> Associator for T {
 | |
|     type As = NoisyDrop<T>;
 | |
| }
 | |
| struct Wrap<A: Associator>(<A as Associator>::As);
 | |
| 
 | |
| fn projection() {
 | |
|     let (_w, bomb);
 | |
|     bomb = vec![""];
 | |
|     _w = Wrap::<&[&str]>(NoisyDrop(&bomb));
 | |
| }
 | |
| //~^^ ERROR `bomb` does not live long enough
 | |
| 
 | |
| fn closure() {
 | |
|     let (_w,v);
 | |
|     v = vec![""];
 | |
|     _w = {
 | |
|         let u = NoisyDrop(&v);
 | |
|         //~^ ERROR `v` does not live long enough
 | |
|         move || u.0.len()
 | |
|     };
 | |
| }
 | |
| 
 | |
| fn main() { closure(); projection() }
 | 
