mirror of https://github.com/rust-lang/rust
37 lines
471 B
Rust
37 lines
471 B
Rust
//@ check-pass
|
|
|
|
use std::marker::PhantomData;
|
|
|
|
pub trait Type {
|
|
type Ref<'a>;
|
|
}
|
|
|
|
pub trait AsBytes {}
|
|
|
|
impl AsBytes for &str {}
|
|
|
|
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();
|
|
}
|