// known-bug: #103507 // failure-status: 101 // normalize-stderr-test "note: .*\n\n" -> "" // normalize-stderr-test "thread 'rustc' panicked.*\n" -> "" // normalize-stderr-test "(error: internal compiler error: [^:]+):\d+:\d+: " -> "$1:LL:CC: " // rustc-env:RUST_BACKTRACE=0 #![feature(type_alias_impl_trait)] #![feature(const_trait_impl)] #![feature(const_refs_to_cell)] #![feature(inline_const)] use std::marker::Destruct; trait T { type Item; } type Alias<'a> = impl T; struct S; impl<'a> T for &'a S { type Item = &'a (); } const fn filter_positive<'a>() -> &'a Alias<'a> { &&S } const fn with_positive Fn(&'a Alias<'a>) + ~const Destruct>(fun: F) { fun(filter_positive()); } const fn foo(_: &Alias<'_>) {} const BAR: () = { with_positive(foo); }; fn main() {}