summaryrefslogtreecommitdiffstats
path: root/src/test/ui/impl-trait/impl_fn_associativity.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/impl-trait/impl_fn_associativity.rs')
-rw-r--r--src/test/ui/impl-trait/impl_fn_associativity.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/test/ui/impl-trait/impl_fn_associativity.rs b/src/test/ui/impl-trait/impl_fn_associativity.rs
new file mode 100644
index 000000000..71a8f9c77
--- /dev/null
+++ b/src/test/ui/impl-trait/impl_fn_associativity.rs
@@ -0,0 +1,26 @@
+// 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);
+}