--- /dev/null
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![feature(universal_impl_trait)]
+
+fn hrtb(f: impl Fn(&u32) -> u32) -> u32 {
+ f(&22) + f(&44)
+}
+
+fn main() {
+ let sum = hrtb(|x| x * 2);
+ assert_eq!(sum, 22*2 + 44*2);
+}
--- /dev/null
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![feature(universal_impl_trait)]
+
+fn hrtb(f: impl for<'a> Fn(&'a u32) -> &'a u32) -> u32 {
+ f(&22) + f(&44)
+}
+
+fn main() {
+ let sum = hrtb(|x| x);
+ assert_eq!(sum, 22 + 44);
+}
--- /dev/null
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![feature(universal_impl_trait)]
+use std::fmt::Display;
+
+fn check_display_eq(iter: &Vec<impl Display>) {
+ let mut collected = String::new();
+ for it in iter {
+ let disp = format!("{} ", it);
+ collected.push_str(&disp);
+ }
+ assert_eq!("0 3 27 823 4891 1 0", collected.trim());
+}
+
+fn main() {
+ let i32_list_vec = vec![0i32, 3, 27, 823, 4891, 1, 0];
+ let u32_list_vec = vec![0u32, 3, 27, 823, 4891, 1, 0];
+ let str_list_vec = vec!["0", "3", "27", "823", "4891", "1", "0"];
+
+ check_display_eq(&i32_list_vec);
+ check_display_eq(&u32_list_vec);
+ check_display_eq(&str_list_vec);
+}
--- /dev/null
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![feature(universal_impl_trait)]
+
+use std::fmt::Debug;
+
+trait InTraitDefnParameters {
+ fn in_parameters(_: impl Debug) -> String;
+}
+
+impl InTraitDefnParameters for () {
+ fn in_parameters(v: impl Debug) -> String {
+ format!("() + {:?}", v)
+ }
+}
+
+fn main() {
+ let s = <() as InTraitDefnParameters>::in_parameters(22);
+ assert_eq!(s, "() + 22");
+}