diff --git a/src/array_string.rs b/src/array_string.rs index 392ff4e..d71850b 100644 --- a/src/array_string.rs +++ b/src/array_string.rs @@ -59,7 +59,26 @@ impl ArrayString /// assert_eq!(&string[..], "foo"); /// assert_eq!(string.capacity(), 16); /// ``` - pub const fn new() -> ArrayString { + pub fn new() -> ArrayString { + assert_capacity_limit!(CAP); + unsafe { + ArrayString { xs: MaybeUninit::uninit().assume_init(), len: 0 } + } + } + + /// Create a new empty `ArrayString` (const fn). + /// + /// Capacity is inferred from the type parameter. + /// + /// ``` + /// use arrayvec::ArrayString; + /// + /// let mut string = ArrayString::<16>::new(); + /// string.push_str("foo"); + /// assert_eq!(&string[..], "foo"); + /// assert_eq!(string.capacity(), 16); + /// ``` + pub const fn new_const() -> ArrayString { assert_capacity_limit!(CAP); ArrayString { xs: MakeMaybeUninit::ARRAY, len: 0 } } diff --git a/src/arrayvec.rs b/src/arrayvec.rs index f00efeb..a6c7b74 100644 --- a/src/arrayvec.rs +++ b/src/arrayvec.rs @@ -77,7 +77,27 @@ impl ArrayVec { /// assert_eq!(&array[..], &[1, 2]); /// assert_eq!(array.capacity(), 16); /// ``` - pub const fn new() -> ArrayVec { + pub fn new() -> ArrayVec { + assert_capacity_limit!(CAP); + unsafe { + ArrayVec { xs: MaybeUninit::uninit().assume_init(), len: 0 } + } + } + + /// Create a new empty `ArrayVec` (const fn). + /// + /// The maximum capacity is given by the generic parameter `CAP`. + /// + /// ``` + /// use arrayvec::ArrayVec; + /// + /// let mut array = ArrayVec::<_, 16>::new(); + /// array.push(1); + /// array.push(2); + /// assert_eq!(&array[..], &[1, 2]); + /// assert_eq!(array.capacity(), 16); + /// ``` + pub const fn new_const() -> ArrayVec { assert_capacity_limit!(CAP); ArrayVec { xs: MakeMaybeUninit::ARRAY, len: 0 } } diff --git a/tests/tests.rs b/tests/tests.rs index 662f5e4..d7f5805 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -730,7 +730,7 @@ fn deny_max_capacity_arrayvec_value() { #[test] fn test_arrayvec_const_constructible() { - const OF_U8: ArrayVec, 10> = ArrayVec::new(); + const OF_U8: ArrayVec, 10> = ArrayVec::new_const(); let mut var = OF_U8; assert!(var.is_empty()); @@ -742,7 +742,7 @@ fn test_arrayvec_const_constructible() { #[test] fn test_arraystring_const_constructible() { - const AS: ArrayString<10> = ArrayString::new(); + const AS: ArrayString<10> = ArrayString::new_const(); let mut var = AS; assert!(var.is_empty());