mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-05 11:48:30 +00:00
parent
127c36c794
commit
db68dc27f4
44
tests/ui/nll/unexpected-inference-var-ice-116599.rs
Normal file
44
tests/ui/nll/unexpected-inference-var-ice-116599.rs
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
// ICE unexpected inference var
|
||||||
|
// issue: rust-lang/rust#116599
|
||||||
|
//@ check-pass
|
||||||
|
|
||||||
|
pub trait EvaluateConstMethods {
|
||||||
|
type Trait: TraitWithConstMethods;
|
||||||
|
|
||||||
|
/// **This block breaks**
|
||||||
|
const DATA_3: Data3 = {
|
||||||
|
<<<Self::Trait as TraitWithConstMethods>::Method2 as ConstFn<_, _>>::Body<
|
||||||
|
<<Self::Trait as TraitWithConstMethods>::Method1 as ConstFn<_, _>>::Body<ContainsData1>,
|
||||||
|
> as Contains<_>>::ITEM
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait TraitWithConstMethods {
|
||||||
|
/// "const trait method" of signature `fn(Data1) -> Data2`
|
||||||
|
type Method1: ConstFn<Data1, Data2>;
|
||||||
|
|
||||||
|
/// "const trait method" of signature `fn(Data2) -> Data3`
|
||||||
|
type Method2: ConstFn<Data2, Data3>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A trait which tries to implement const methods in traits
|
||||||
|
pub trait ConstFn<Arg, Ret> {
|
||||||
|
type Body<T: Contains<Arg>>: Contains<Ret>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A ZST which represents / "contains" a const value which can be pass to a [`ConstFn`]
|
||||||
|
pub trait Contains<T> {
|
||||||
|
const ITEM: T;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct ContainsData1;
|
||||||
|
impl Contains<Data1> for ContainsData1 {
|
||||||
|
const ITEM: Data1 = Data1 {};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Arbitrary data
|
||||||
|
pub struct Data1 {}
|
||||||
|
pub struct Data2 {}
|
||||||
|
pub struct Data3 {}
|
||||||
|
|
||||||
|
pub fn main() {}
|
Loading…
Reference in New Issue
Block a user