// run-pass // aux-build:fn-aux.rs #![allow(unused)] #![feature(associated_type_bounds)] extern crate fn_aux; use fn_aux::*; // ATB, Type parameters, Inline bounds: fn inline_bound>(beta: B) -> usize { desugared_bound(beta) } fn inline_bound_region>(beta: B) -> usize { desugared_bound_region(beta) } fn inline_bound_multi>( beta: B ) -> usize { desugared_bound_multi(beta) } fn inline_bound_region_specific<'a, B: Beta>>( gamma: &'a B::Gamma ) -> usize { desugared_bound_region_specific::(gamma) } fn inline_bound_region_forall Epsilon<'a>>>( beta: B ) -> usize { desugared_bound_region_forall(beta) } fn inline_bound_region_forall2 Epsilon<'a, Zeta: Eta>>>( beta: B ) -> usize { desugared_bound_region_forall2(beta) } fn inline_bound_nested>>( beta: B ) -> usize { desugared_bound_nested(beta) } fn main() { let beta = BetaType; let gamma = beta.gamma(); assert_eq!(42, inline_bound(beta)); assert_eq!(24, inline_bound_region(beta)); assert_eq!(42 + 24 + 1337, inline_bound_multi(beta)); assert_eq!(7331, inline_bound_region_specific::(&gamma)); assert_eq!(7331 * 2, inline_bound_region_forall(beta)); // FIXME: requires lazy normalization. // assert_eq!(7331 * 2, inline_bound_region_forall2(beta)); assert_eq!(42 + 1337, inline_bound_nested(beta)); }