Skip to content

Compilation fails on latest nightly (e77366b57 2023-05-16) #59

Description

@Skallwar

Hi. Thanks for your crate.
I notice that staticvec is not building with latest nightly:

❯ rustc -V
rustc 1.71.0-nightly (e77366b57 2023-05-16)
❯ cargo build
    Updating crates.io index
   Compiling staticvec v0.11.9 (/home/esteban/dev/staticvec)
warning: the feature `const_ptr_read` has been stable since 1.71.0-nightly and no longer requires an attribute to enable
  --> src/lib.rs:45:3
   |
45 |   const_ptr_read,
   |   ^^^^^^^^^^^^^^
   |
   = note: `#[warn(stable_features)]` on by default

error: ~const can only be applied to `#[const_trait]` traits
    --> src/lib.rs:1420:26
     |
1420 |   where T: Copy + ~const PartialOrd {
     |                          ^^^^^^^^^^

error: ~const can only be applied to `#[const_trait]` traits
    --> src/lib.rs:1455:26
     |
1455 |   where T: Copy + ~const PartialOrd {
     |                          ^^^^^^^^^^

error: const `impl` for trait `Clone` which is not marked with `#[const_trait]`
  --> src/heap/heap_trait_impls.rs:25:37
   |
25 | impl<T: Copy, const N: usize> const Clone for StaticHeap<T, N> {
   |                                     ^^^^^
   |
   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
   = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Default` which is not marked with `#[const_trait]`
  --> src/heap/heap_trait_impls.rs:47:36
   |
47 | impl<T: Ord, const N: usize> const Default for StaticHeap<T, N> {
   |                                    ^^^^^^^
   |
   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
   = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `IntoIterator` which is not marked with `#[const_trait]`
   --> src/heap/heap_trait_impls.rs:199:31
    |
199 | impl<T, const N: usize> const IntoIterator for StaticHeap<T, N> {
    |                               ^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `IntoIterator` which is not marked with `#[const_trait]`
   --> src/heap/heap_trait_impls.rs:225:35
    |
225 | impl<'a, T, const N: usize> const IntoIterator for &'a StaticHeap<T, N> {
    |                                   ^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `IntoIterator` which is not marked with `#[const_trait]`
   --> src/heap/heap_trait_impls.rs:235:35
    |
235 | impl<'a, T, const N: usize> const IntoIterator for &'a mut StaticHeap<T, N> {
    |                                   ^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `From` which is not marked with `#[const_trait]`
  --> src/string/string_errors.rs:75:12
   |
75 | impl const From<DecodeUtf16Error> for StringError {
   |            ^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
   = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `From` which is not marked with `#[const_trait]`
  --> src/string/string_errors.rs:82:12
   |
82 | impl const From<Utf8Error> for StringError {
   |            ^^^^^^^^^^^^^^^
   |
   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
   = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `From` which is not marked with `#[const_trait]`
  --> src/string/string_errors.rs:89:28
   |
89 | impl<const N: usize> const From<CapacityError<N>> for StringError {
   |                            ^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
   = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `AsMut` which is not marked with `#[const_trait]`
  --> src/string/string_trait_impls.rs:39:28
   |
39 | impl<const N: usize> const AsMut<str> for StaticString<N> {
   |                            ^^^^^^^^^^
   |
   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
   = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `AsRef` which is not marked with `#[const_trait]`
  --> src/string/string_trait_impls.rs:46:28
   |
46 | impl<const N: usize> const AsRef<str> for StaticString<N> {
   |                            ^^^^^^^^^^
   |
   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
   = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `AsRef` which is not marked with `#[const_trait]`
  --> src/string/string_trait_impls.rs:53:28
   |
53 | impl<const N: usize> const AsRef<[u8]> for StaticString<N> {
   |                            ^^^^^^^^^^^
   |
   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
   = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Borrow` which is not marked with `#[const_trait]`
  --> src/string/string_trait_impls.rs:60:28
   |
60 | impl<const N: usize> const Borrow<str> for StaticString<N> {
   |                            ^^^^^^^^^^^
   |
   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
   = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `BorrowMut` which is not marked with `#[const_trait]`
  --> src/string/string_trait_impls.rs:67:28
   |
67 | impl<const N: usize> const BorrowMut<str> for StaticString<N> {
   |                            ^^^^^^^^^^^^^^
   |
   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
   = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Clone` which is not marked with `#[const_trait]`
  --> src/string/string_trait_impls.rs:74:28
   |
74 | impl<const N: usize> const Clone for StaticString<N> {
   |                            ^^^^^
   |
   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
   = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Default` which is not marked with `#[const_trait]`
   --> src/string/string_trait_impls.rs:106:28
    |
106 | impl<const N: usize> const Default for StaticString<N> {
    |                            ^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Deref` which is not marked with `#[const_trait]`
   --> src/string/string_trait_impls.rs:113:28
    |
113 | impl<const N: usize> const Deref for StaticString<N> {
    |                            ^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `DerefMut` which is not marked with `#[const_trait]`
   --> src/string/string_trait_impls.rs:122:28
    |
122 | impl<const N: usize> const DerefMut for StaticString<N> {
    |                            ^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Index` which is not marked with `#[const_trait]`
   --> src/string/string_trait_impls.rs:262:28
    |
262 | impl<const N: usize> const Index<RangeFull> for StaticString<N> {
    |                            ^^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `IndexMut` which is not marked with `#[const_trait]`
   --> src/string/string_trait_impls.rs:271:28
    |
271 | impl<const N: usize> const IndexMut<RangeFull> for StaticString<N> {
    |                            ^^^^^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `AsMut` which is not marked with `#[const_trait]`
  --> src/trait_impls.rs:47:31
   |
47 | impl<T, const N: usize> const AsMut<[T]> for StaticVec<T, N> {
   |                               ^^^^^^^^^^
   |
   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
   = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `AsRef` which is not marked with `#[const_trait]`
  --> src/trait_impls.rs:54:31
   |
54 | impl<T, const N: usize> const AsRef<[T]> for StaticVec<T, N> {
   |                               ^^^^^^^^^^
   |
   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
   = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Borrow` which is not marked with `#[const_trait]`
  --> src/trait_impls.rs:61:31
   |
61 | impl<T, const N: usize> const Borrow<[T]> for StaticVec<T, N> {
   |                               ^^^^^^^^^^^
   |
   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
   = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `BorrowMut` which is not marked with `#[const_trait]`
  --> src/trait_impls.rs:68:31
   |
68 | impl<T, const N: usize> const BorrowMut<[T]> for StaticVec<T, N> {
   |                               ^^^^^^^^^^^^^^
   |
   = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
   = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Clone` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:112:37
    |
112 | impl<T: Copy, const N: usize> const Clone for StaticVec<T, N> {
    |                                     ^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Default` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:153:31
    |
153 | impl<T, const N: usize> const Default for StaticVec<T, N> {
    |                               ^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Deref` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:161:31
    |
161 | impl<T, const N: usize> const Deref for StaticVec<T, N> {
    |                               ^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `DerefMut` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:169:31
    |
169 | impl<T, const N: usize> const DerefMut for StaticVec<T, N> {
    |                               ^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `From` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:362:37
    |
362 | impl<T: Copy, const N: usize> const From<&[T]> for StaticVec<T, N> {
    |                                     ^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `From` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:371:37
    |
371 | impl<T: Copy, const N: usize> const From<&mut [T]> for StaticVec<T, N> {
    |                                     ^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `From` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:389:31
    |
389 | impl<T, const N: usize> const From<[T; N]> for StaticVec<T, N> {
    |                               ^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `From` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:396:55
    |
396 | impl<T: Copy, const N1: usize, const N2: usize> const From<&[T; N1]> for StaticVec<T, N2> {
    |                                                       ^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `From` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:405:37
    |
405 | impl<T: Copy, const N: usize> const From<&[T; N]> for StaticVec<T, N> {
    |                                     ^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `From` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:414:55
    |
414 | impl<T: Copy, const N1: usize, const N2: usize> const From<&mut [T; N1]> for StaticVec<T, N2> {
    |                                                       ^^^^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `From` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:423:37
    |
423 | impl<T: Copy, const N: usize> const From<&mut [T; N]> for StaticVec<T, N> {
    |                                     ^^^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Index` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:495:31
    |
495 | impl<T, const N: usize> const Index<usize> for StaticVec<T, N> {
    |                               ^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `IndexMut` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:518:31
    |
518 | impl<T, const N: usize> const IndexMut<usize> for StaticVec<T, N> {
    |                               ^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Index` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:540:31
    |
540 | impl<T, const N: usize> const Index<Range<usize>> for StaticVec<T, N> {
    |                               ^^^^^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `IndexMut` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:554:31
    |
554 | impl<T, const N: usize> const IndexMut<Range<usize>> for StaticVec<T, N> {
    |                               ^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Index` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:572:31
    |
572 | impl<T, const N: usize> const Index<RangeFrom<usize>> for StaticVec<T, N> {
    |                               ^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `IndexMut` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:589:31
    |
589 | impl<T, const N: usize> const IndexMut<RangeFrom<usize>> for StaticVec<T, N> {
    |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Index` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:605:31
    |
605 | impl<T, const N: usize> const Index<RangeFull> for StaticVec<T, N> {
    |                               ^^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `IndexMut` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:615:31
    |
615 | impl<T, const N: usize> const IndexMut<RangeFull> for StaticVec<T, N> {
    |                               ^^^^^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Index` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:624:31
    |
624 | impl<T, const N: usize> const Index<RangeInclusive<usize>> for StaticVec<T, N> {
    |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `IndexMut` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:638:31
    |
638 | impl<T, const N: usize> const IndexMut<RangeInclusive<usize>> for StaticVec<T, N> {
    |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Index` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:651:31
    |
651 | impl<T, const N: usize> const Index<RangeTo<usize>> for StaticVec<T, N> {
    |                               ^^^^^^^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `IndexMut` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:663:31
    |
663 | impl<T, const N: usize> const IndexMut<RangeTo<usize>> for StaticVec<T, N> {
    |                               ^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `Index` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:674:31
    |
674 | impl<T, const N: usize> const Index<RangeToInclusive<usize>> for StaticVec<T, N> {
    |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `IndexMut` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:686:31
    |
686 | impl<T, const N: usize> const IndexMut<RangeToInclusive<usize>> for StaticVec<T, N> {
    |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `IntoIterator` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:708:39
    |
708 | impl<'a, T: 'a, const N: usize> const IntoIterator for &'a StaticVec<T, N> {
    |                                       ^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `IntoIterator` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:719:39
    |
719 | impl<'a, T: 'a, const N: usize> const IntoIterator for &'a mut StaticVec<T, N> {
    |                                       ^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: const `impl` for trait `IntoIterator` which is not marked with `#[const_trait]`
   --> src/trait_impls.rs:730:31
    |
730 | impl<T, const N: usize> const IntoIterator for StaticVec<T, N> {
    |                               ^^^^^^^^^^^^
    |
    = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
    = note: adding a non-const method body in the future would be a breaking change

error: ~const can only be applied to `#[const_trait]` traits
   --> src/utils.rs:177:57
    |
177 | pub(crate) const fn quicksort_internal<T: Copy + ~const PartialOrd>(
    |                                                         ^^^^^^^^^^

warning: `staticvec` (lib) generated 1 warning
error: could not compile `staticvec` (lib) due to 54 previous errors; 1 warning emitted

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions