mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-26 06:35:27 +00:00
add tests for metadata for unsized generics and opaques
This commit is contained in:
parent
1d834cb657
commit
210e829010
22
src/test/ui/traits/pointee-tail-is-generic-errors.rs
Normal file
22
src/test/ui/traits/pointee-tail-is-generic-errors.rs
Normal file
@ -0,0 +1,22 @@
|
||||
// edition:2018
|
||||
|
||||
#![feature(ptr_metadata)]
|
||||
#![feature(type_alias_impl_trait)]
|
||||
|
||||
type Opaque = impl std::fmt::Debug + ?Sized;
|
||||
|
||||
fn opaque() -> &'static Opaque {
|
||||
&[1] as &[i32]
|
||||
}
|
||||
|
||||
fn a<T: ?Sized>() {
|
||||
is_thin::<T>();
|
||||
//~^ ERROR type mismatch resolving `<T as Pointee>::Metadata == ()`
|
||||
|
||||
is_thin::<Opaque>();
|
||||
//~^ ERROR type mismatch resolving `<impl Debug + ?Sized as Pointee>::Metadata == ()`
|
||||
}
|
||||
|
||||
fn is_thin<T: std::ptr::Pointee<Metadata = ()> + ?Sized>() {}
|
||||
|
||||
fn main() {}
|
40
src/test/ui/traits/pointee-tail-is-generic-errors.stderr
Normal file
40
src/test/ui/traits/pointee-tail-is-generic-errors.stderr
Normal file
@ -0,0 +1,40 @@
|
||||
error[E0271]: type mismatch resolving `<T as Pointee>::Metadata == ()`
|
||||
--> $DIR/pointee-tail-is-generic-errors.rs:13:5
|
||||
|
|
||||
LL | is_thin::<T>();
|
||||
| ^^^^^^^^^^^^ expected `()`, found associated type
|
||||
|
|
||||
= note: expected unit type `()`
|
||||
found associated type `<T as Pointee>::Metadata`
|
||||
= help: consider constraining the associated type `<T as Pointee>::Metadata` to `()`
|
||||
= note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
|
||||
note: required by a bound in `is_thin`
|
||||
--> $DIR/pointee-tail-is-generic-errors.rs:20:33
|
||||
|
|
||||
LL | fn is_thin<T: std::ptr::Pointee<Metadata = ()> + ?Sized>() {}
|
||||
| ^^^^^^^^^^^^^ required by this bound in `is_thin`
|
||||
|
||||
error[E0271]: type mismatch resolving `<impl Debug + ?Sized as Pointee>::Metadata == ()`
|
||||
--> $DIR/pointee-tail-is-generic-errors.rs:16:5
|
||||
|
|
||||
LL | type Opaque = impl std::fmt::Debug + ?Sized;
|
||||
| ----------------------------- the found opaque type
|
||||
...
|
||||
LL | is_thin::<Opaque>();
|
||||
| ^^^^^^^^^^^^^^^^^ expected `()`, found associated type
|
||||
|
|
||||
= note: expected unit type `()`
|
||||
found associated type `<impl Debug + ?Sized as Pointee>::Metadata`
|
||||
note: required by a bound in `is_thin`
|
||||
--> $DIR/pointee-tail-is-generic-errors.rs:20:33
|
||||
|
|
||||
LL | fn is_thin<T: std::ptr::Pointee<Metadata = ()> + ?Sized>() {}
|
||||
| ^^^^^^^^^^^^^ required by this bound in `is_thin`
|
||||
help: consider constraining the associated type `<impl Debug + ?Sized as Pointee>::Metadata` to `()`
|
||||
|
|
||||
LL | type Opaque = impl std::fmt::Debug<Metadata = ()> + ?Sized;
|
||||
| +++++++++++++++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0271`.
|
Loading…
Reference in New Issue
Block a user