#![allow(unused_variables)] #![feature(vec_push_within_capacity)] fn main() { use std::collections::TryReserveError; fn from_iter_fallible( iter: impl Iterator, ) -> Result, TryReserveError> { let mut vec = Vec::new(); for value in iter { if let Err(value) = vec.push_within_capacity(value) { vec.try_reserve(1)?; let _ = vec.push_within_capacity(value); } } Ok(vec) } assert_eq!(from_iter_fallible(0..100), Ok(Vec::from_iter(0..100))); }