Rust errors / Everything else
Rust compiler error · checked with rustc 1.99.0
Rust error E0691: #### Note: this error code is no longer emitted by the compiler
What it means#### Note: this error code is no longer emitted by the compiler.
Retired: rustc no longer emits this error code. You may still see it in old answers, books and CI logs from older toolchains; the explanation below is kept for reference.
The compiler team's explanation
Note: this error code is no longer emitted by the compiler.
A struct, enum, or union with the repr(transparent) representation hint contains a zero-sized field that requires non-trivial alignment.
Erroneous code example:
#![feature(repr_align)]
#[repr(align(32))]
struct ForceAlign32;
#[repr(transparent)]
struct Wrapper(f32, ForceAlign32); // error: zero-sized field in transparent
// struct has alignment of 32, which
// is larger than 1
A transparent struct, enum, or union is supposed to be represented exactly like the piece of data it contains. Zero-sized fields with different alignment requirements potentially conflict with this property. In the example above, Wrapper would have to be aligned to 32 bytes even though f32 has a smaller alignment requirement.
Consider removing the over-aligned zero-sized field:
#[repr(transparent)]
struct Wrapper(f32);
Alternatively, PhantomData<T> has alignment 1 for all T, so you can use it if you need to keep the field for some reason:
#![feature(repr_align)]
use std::marker::PhantomData;
#[repr(align(32))]
struct ForceAlign32;
#[repr(transparent)]
struct Wrapper(f32, PhantomData<ForceAlign32>);
Note that empty arrays [T; 0] have the same alignment requirement as the element type T. Also note that the error is conservatively reported even when the alignment of the zero-sized type is less than or equal to the data field's alignment.
From rustc --explain E0691 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
- E0061this function takes N arguments but M were supplied
- E0412cannot find type in this scope
- E0515cannot return reference to local variable
- E0728await is only allowed inside async functions and blocks
- E0659`foo` is ambiguous
- E0670Rust 2015 does not permit the use of `async fn`
- E0695unlabeled `break` inside of a labeled block
- E0696`continue` pointing to a labeled block
Up next
Often hit nextE0061: this function takes N arguments but M were suppliedA related error from the same family.Read it next →Did this answer your question?