diff --git a/library/core/src/iter/adapters/chain.rs b/library/core/src/iter/adapters/chain.rs
index 60eb3a6da3a4b..f7093e02d2979 100644
--- a/library/core/src/iter/adapters/chain.rs
+++ b/library/core/src/iter/adapters/chain.rs
@@ -3,8 +3,8 @@ use crate::ops::Try;
/// An iterator that links two iterators together, in a chain.
///
-/// This `struct` is created by [`Iterator::chain`]. See its documentation
-/// for more.
+/// This `struct` is created by [`chain`] or [`Iterator::chain`]. See their
+/// documentation for more.
///
/// # Examples
///
@@ -37,6 +37,39 @@ impl Chain {
}
}
+/// Converts the arguments to iterators and links them together, in a chain.
+///
+/// See the documentation of [`Iterator::chain`] for more.
+///
+/// # Examples
+///
+/// ```
+/// #![feature(iter_chain)]
+///
+/// use std::iter::chain;
+///
+/// let a = [1, 2, 3];
+/// let b = [4, 5, 6];
+///
+/// let mut iter = chain(a, b);
+///
+/// assert_eq!(iter.next(), Some(1));
+/// assert_eq!(iter.next(), Some(2));
+/// assert_eq!(iter.next(), Some(3));
+/// assert_eq!(iter.next(), Some(4));
+/// assert_eq!(iter.next(), Some(5));
+/// assert_eq!(iter.next(), Some(6));
+/// assert_eq!(iter.next(), None);
+/// ```
+#[unstable(feature = "iter_chain", reason = "recently added", issue = "none")]
+pub fn chain(a: A, b: B) -> Chain
+where
+ A: IntoIterator,
+ B: IntoIterator- ,
+{
+ Chain::new(a.into_iter(), b.into_iter())
+}
+
#[stable(feature = "rust1", since = "1.0.0")]
impl Iterator for Chain
where
diff --git a/library/core/src/iter/adapters/mod.rs b/library/core/src/iter/adapters/mod.rs
index 8cc2b7cec4165..35d5beeeafb6a 100644
--- a/library/core/src/iter/adapters/mod.rs
+++ b/library/core/src/iter/adapters/mod.rs
@@ -39,6 +39,9 @@ pub use self::array_chunks::ArrayChunks;
#[unstable(feature = "std_internals", issue = "none")]
pub use self::by_ref_sized::ByRefSized;
+#[unstable(feature = "iter_chain", reason = "recently added", issue = "none")]
+pub use self::chain::chain;
+
#[stable(feature = "iter_cloned", since = "1.1.0")]
pub use self::cloned::Cloned;
diff --git a/library/core/src/iter/mod.rs b/library/core/src/iter/mod.rs
index bb35d50b4bfda..87eb2755b9974 100644
--- a/library/core/src/iter/mod.rs
+++ b/library/core/src/iter/mod.rs
@@ -421,6 +421,8 @@ pub use self::traits::{
DoubleEndedIterator, ExactSizeIterator, Extend, FromIterator, IntoIterator, Product, Sum,
};
+#[unstable(feature = "iter_chain", reason = "recently added", issue = "none")]
+pub use self::adapters::chain;
#[stable(feature = "iter_zip", since = "1.59.0")]
pub use self::adapters::zip;
#[unstable(feature = "iter_array_chunks", reason = "recently added", issue = "100450")]
diff --git a/library/core/tests/iter/adapters/chain.rs b/library/core/tests/iter/adapters/chain.rs
index f419f9cec12f8..c93196c8f791c 100644
--- a/library/core/tests/iter/adapters/chain.rs
+++ b/library/core/tests/iter/adapters/chain.rs
@@ -1,6 +1,14 @@
use super::*;
use core::iter::*;
+#[test]
+fn test_chain() {
+ let xs = [0, 1, 2, 3, 4, 5];
+ let ys = [30, 40, 50, 60];
+ let expected = [0, 1, 2, 3, 4, 5, 30, 40, 50, 60];
+ assert_eq!(Vec::from_iter(chain(xs, ys)), expected);
+}
+
#[test]
fn test_iterator_chain() {
let xs = [0, 1, 2, 3, 4, 5];
diff --git a/library/core/tests/lib.rs b/library/core/tests/lib.rs
index 99d4a40c4c962..f7f0a4a8824b2 100644
--- a/library/core/tests/lib.rs
+++ b/library/core/tests/lib.rs
@@ -69,6 +69,7 @@
#![feature(slice_partition_dedup)]
#![feature(iter_advance_by)]
#![feature(iter_array_chunks)]
+#![feature(iter_chain)]
#![feature(iter_collect_into)]
#![feature(iter_partition_in_place)]
#![feature(iter_intersperse)]