| //@ run-pass |
| #![feature(impl_trait_in_fn_trait_return)] |
| use std::fmt::Debug; |
| |
| fn f_debug() -> impl Fn() -> impl Debug { |
| || () |
| } |
| |
| fn ff_debug() -> impl Fn() -> impl Fn() -> impl Debug { |
| || f_debug() |
| } |
| |
| fn multi() -> impl Fn() -> (impl Debug + Send) { |
| || () |
| } |
| |
| fn main() { |
| // Check that `ff_debug` is `() -> (() -> Debug)` and not `(() -> ()) -> Debug` |
| let debug = ff_debug()()(); |
| assert_eq!(format!("{:?}", debug), "()"); |
| |
| let x = multi()(); |
| assert_eq!(format!("{:?}", x), "()"); |
| fn assert_send(_: &impl Send) {} |
| assert_send(&x); |
| } |