3 #![feature(const_mut_refs)]
4 #![feature(inline_const)]
6 use std::marker::PhantomData;
8 // rust-lang/rust#78174: ICE: "cannot convert ReErased to a region vid"
10 let foo = const { "foo" };
11 assert_eq!(foo, "foo");
14 pub struct InvariantRef<'a, T: ?Sized>(&'a T, PhantomData<&'a mut &'a T>);
16 impl<'a, T: ?Sized> InvariantRef<'a, T> {
17 pub const fn new(r: &'a T) -> Self {
18 InvariantRef(r, PhantomData)
22 fn get_invariant_ref<'a>() -> InvariantRef<'a, ()> {
23 const { InvariantRef::<'a, ()>::new(&()) }
26 fn get_invariant_ref2<'a>() -> InvariantRef<'a, ()> {
27 // Try some type inference
28 const { InvariantRef::new(&()) }