- Notifications
You must be signed in to change notification settings - Fork 14k
Closed
Labels
A-GATsArea: Generic associated types (GATs)Area: Generic associated types (GATs)C-bugCategory: This is a bug.Category: This is a bug.F-generic_associated_types`#![feature(generic_associated_types)]` a.k.a. GATs`#![feature(generic_associated_types)]` a.k.a. GATs
Description
I tried this code:
#![feature(generic_associated_types)] use std::marker::PhantomData; pub trait Type { type Ref<'a>; } pub trait AsBytes { fn as_bytes(&self) -> &[u8]; } impl AsBytes for &str { fn as_bytes(&self) -> &[u8] { (*self).as_bytes() } } pub struct Utf8; impl Type for Utf8 { type Ref<'a> = &'a str; } pub struct Bytes<T: Type> { _marker: PhantomData<T>, } impl<T: Type> Bytes<T> where for<'a> T::Ref<'a>: AsBytes, { pub fn new() -> Self { Self { _marker: PhantomData, } } } fn main() { let _b = Bytes::<Utf8>::new(); }I expected to see this happen: I had expected compilation to succeed
Instead, this happened: Compilation fails with the error message below.
error[E0277]: the trait bound `for<'a> <Utf8 as Type>::Ref<'a>: AsBytes` is not satisfied --> src\main.rs:41:14 | 41 | let _b = Bytes::<Utf8>::new(); | ^^^^^^^^^^^^^^^^^^ the trait `for<'a> AsBytes` is not implemented for `<Utf8 as Type>::Ref<'a>` | note: required by `Bytes::<T>::new` --> src\main.rs:33:5 | 33 | pub fn new() -> Self { | ^^^^^^^^^^^^^^^^^^^^ help: consider further restricting the associated type | 40 | fn main() where for<'a> <Utf8 as Type>::Ref<'a>: AsBytes { | ++++++++++++++++++++++++++++++++++++++++++++++ Meta
rustc --version --verbose:
rustc 1.58.0-nightly (e269e6bf4 2021-10-26) binary: rustc commit-hash: e269e6bf47f40c9046cd44ab787881d700099252 commit-date: 2021-10-26 host: x86_64-pc-windows-msvc release: 1.58.0-nightly LLVM version: 13.0.0 gtsiam and qwertz19281
Metadata
Metadata
Assignees
Labels
A-GATsArea: Generic associated types (GATs)Area: Generic associated types (GATs)C-bugCategory: This is a bug.Category: This is a bug.F-generic_associated_types`#![feature(generic_associated_types)]` a.k.a. GATs`#![feature(generic_associated_types)]` a.k.a. GATs