// run-pass // aux-build:fn-aux.rs #![allow(unused)] #![feature(associated_type_bounds)] extern crate fn_aux; use fn_aux::*; // ATB, Type parameters, Where-clauses: fn where_bound(beta: B) -> usize where B: Beta { desugared_bound(beta) } fn where_bound_region(beta: B) -> usize where B: Beta { desugared_bound_region(beta) } fn where_bound_multi(beta: B) -> usize where B: Copy + Beta, { desugared_bound_multi(beta) } fn where_bound_region_specific<'a, B>(gamma: &'a B::Gamma) -> usize where B: Beta>, { desugared_bound_region_specific::(gamma) } fn where_bound_region_forall(beta: B) -> usize where B: Beta Epsilon<'a>>, { desugared_bound_region_forall(beta) } fn where_bound_region_forall2(beta: B) -> usize where B: Beta Epsilon<'a, Zeta: Eta>>, { desugared_bound_region_forall2(beta) } fn where_contraint_region_forall(beta: B) -> usize where for<'a> &'a B: Beta, { desugared_contraint_region_forall(beta) } fn where_bound_nested(beta: B) -> usize where B: Beta>, { desugared_bound_nested(beta) } fn main() { let beta = BetaType; let gamma = beta.gamma(); assert_eq!(42, where_bound(beta)); assert_eq!(24, where_bound_region(beta)); assert_eq!(42 + 24 + 1337, where_bound_multi(beta)); assert_eq!(7331, where_bound_region_specific::(&gamma)); assert_eq!(7331 * 2, where_bound_region_forall::(beta)); assert_eq!(42 + 1337, where_bound_nested::(beta)); }