mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-29 20:46:07 +03:00
field representing types: add test for unsized types
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
error[E0277]: the trait bound `field_of!(MyStruct, 0): std::field::Field` is not satisfied
|
||||
--> $DIR/not-field-if-unsized.rs:17:20
|
||||
|
|
||||
LL | assert_field::<field_of!(MyStruct, 0)>();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ the nightly-only, unstable trait `std::field::Field` is not implemented for `field_of!(MyStruct, 0)`
|
||||
|
|
||||
note: required by a bound in `assert_field`
|
||||
--> $DIR/not-field-if-unsized.rs:12:20
|
||||
|
|
||||
LL | fn assert_field<F: Field>() {}
|
||||
| ^^^^^ required by this bound in `assert_field`
|
||||
|
||||
error[E0277]: the trait bound `field_of!(MyStruct, 1): std::field::Field` is not satisfied
|
||||
--> $DIR/not-field-if-unsized.rs:21:20
|
||||
|
|
||||
LL | assert_field::<field_of!(MyStruct, 1)>();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ the nightly-only, unstable trait `std::field::Field` is not implemented for `field_of!(MyStruct, 1)`
|
||||
|
|
||||
note: required by a bound in `assert_field`
|
||||
--> $DIR/not-field-if-unsized.rs:12:20
|
||||
|
|
||||
LL | fn assert_field<F: Field>() {}
|
||||
| ^^^^^ required by this bound in `assert_field`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
@@ -0,0 +1,27 @@
|
||||
error[E0277]: the trait bound `field_of!(MyStruct, 0): std::field::Field` is not satisfied
|
||||
--> $DIR/not-field-if-unsized.rs:17:20
|
||||
|
|
||||
LL | assert_field::<field_of!(MyStruct, 0)>();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ the nightly-only, unstable trait `std::field::Field` is not implemented for `field_of!(MyStruct, 0)`
|
||||
|
|
||||
note: required by a bound in `assert_field`
|
||||
--> $DIR/not-field-if-unsized.rs:12:20
|
||||
|
|
||||
LL | fn assert_field<F: Field>() {}
|
||||
| ^^^^^ required by this bound in `assert_field`
|
||||
|
||||
error[E0277]: the trait bound `field_of!(MyStruct, 1): std::field::Field` is not satisfied
|
||||
--> $DIR/not-field-if-unsized.rs:21:20
|
||||
|
|
||||
LL | assert_field::<field_of!(MyStruct, 1)>();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ the nightly-only, unstable trait `std::field::Field` is not implemented for `field_of!(MyStruct, 1)`
|
||||
|
|
||||
note: required by a bound in `assert_field`
|
||||
--> $DIR/not-field-if-unsized.rs:12:20
|
||||
|
|
||||
LL | fn assert_field<F: Field>() {}
|
||||
| ^^^^^ required by this bound in `assert_field`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
@@ -0,0 +1,23 @@
|
||||
//@ revisions: old next
|
||||
//@ [next] compile-flags: -Znext-solver
|
||||
#![expect(incomplete_features)]
|
||||
#![feature(field_projections)]
|
||||
|
||||
use std::field::{Field, field_of};
|
||||
|
||||
pub trait Trait {}
|
||||
|
||||
pub struct MyStruct(usize, dyn Trait);
|
||||
|
||||
fn assert_field<F: Field>() {}
|
||||
|
||||
fn main() {
|
||||
// FIXME(FRTs): this requires relaxing the `Base: ?Sized` bound in the
|
||||
// `Field` trait & compiler changes.
|
||||
assert_field::<field_of!(MyStruct, 0)>();
|
||||
//~^ ERROR: the trait bound `field_of!(MyStruct, 0): std::field::Field` is not satisfied [E0277]
|
||||
|
||||
// FIXME(FRTs): improve this error message, point to the `dyn Trait` span.
|
||||
assert_field::<field_of!(MyStruct, 1)>();
|
||||
//~^ ERROR: the trait bound `field_of!(MyStruct, 1): std::field::Field` is not satisfied [E0277]
|
||||
}
|
||||
Reference in New Issue
Block a user