| #![feature(unsafe_binders)] |
| //~^ WARN the feature `unsafe_binders` is incomplete |
| |
| use std::unsafe_binder::{wrap_binder, unwrap_binder}; |
| |
| fn a() { |
| let _: unsafe<'a> &'a i32 = wrap_binder!(&()); |
| //~^ ERROR mismatched types |
| } |
| |
| fn b() { |
| let _: i32 = wrap_binder!(&()); |
| //~^ ERROR `wrap_binder!()` can only wrap into unsafe binder |
| } |
| |
| fn c() { |
| let y = 1; |
| unwrap_binder!(y); |
| //~^ ERROR expected unsafe binder, found integer as input |
| } |
| |
| fn d() { |
| let unknown = Default::default(); |
| //~^ ERROR type annotations needed |
| unwrap_binder!(unknown); |
| } |
| |
| fn e() { |
| let x = wrap_binder!(&42); |
| //~^ ERROR type annotations needed |
| // Currently, type inference doesn't flow backwards for unsafe binders. |
| // It could, perhaps, but that may cause even more surprising corners. |
| let _: unsafe<'a> &'a i32 = x; |
| } |
| |
| fn main() {} |