Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Skallwar opened this issue May 17, 2023 · 4 comments
Open

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

Skallwar opened this issue May 17, 2023 · 4 comments

Comments

@Skallwar
Copy link

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
@slightlyoutofphase
Copy link
Owner

I'm intending to get this all updated soon.

@slightlyoutofphase
Copy link
Owner

I actually cannot restore the intended functionality currently, due to this unexpected development:
rust-lang/rust#110395

There's no point in me publishing a modified version without all this stuff as it would be kind of a big regression, so I unfortunately have to just recommend using a nightly compiler version from prior to the change I linked above, for the time being.

I will update to whatever the new syntax is and publish a new version on crates.io as soon as it is possible to do so.

@Skallwar
Copy link
Author

Thanks for your help on this!

@blitz
Copy link

blitz commented May 10, 2024

Compilation still fails on the latest nightly (2024-05-09). :(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants