Rollup merge of #107941 - compiler-errors:str-has-u8-slice-for-auto, r=lcnr

Treat `str` as containing `[u8]` for auto trait purposes

Wanted to gauge ``@rust-lang/lang`` and ``@rust-lang/types`` teams' thoughts on treating `str` as "containing" a `[u8]` slice for auto-trait purposes.

``@dtolnay`` brought this up in https://github.com/rust-lang/rust/issues/13231#issuecomment-1399386472 as a blocker for future `str` type librarification, and I think it's both a valid concern and very easy to fix. I'm interested in actually doing that `str` type librarification (#107939), but this probably should be considered in the mean time regardless of that PR.

r? types for the impl, though this definitely needs an FCP.
This commit is contained in:
Matthias Krüger 2023-02-26 12:04:57 +01:00 committed by GitHub
commit 2bc553c6ea
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 36 additions and 2 deletions

View file

@ -0,0 +1,13 @@
#![feature(negative_impls)]
#![feature(auto_traits)]
auto trait AutoTrait {}
impl<T> !AutoTrait for [T] {}
fn needs_auto_trait<T: AutoTrait + ?Sized>() {}
fn main() {
needs_auto_trait::<str>();
//~^ ERROR the trait bound `[u8]: AutoTrait` is not satisfied in `str`
}

View file

@ -0,0 +1,16 @@
error[E0277]: the trait bound `[u8]: AutoTrait` is not satisfied in `str`
--> $DIR/str-contains-slice-conceptually.rs:11:22
|
LL | needs_auto_trait::<str>();
| ^^^ within `str`, the trait `AutoTrait` is not implemented for `[u8]`
|
= note: `str` is considered to contain a `[u8]` slice for auto trait purposes
note: required by a bound in `needs_auto_trait`
--> $DIR/str-contains-slice-conceptually.rs:8:24
|
LL | fn needs_auto_trait<T: AutoTrait + ?Sized>() {}
| ^^^^^^^^^ required by this bound in `needs_auto_trait`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0277`.