blob: ead57f00dde500178e4844f099126ef5f73810a5 [file]
use std::fmt::Display;
trait ImplicitTrait {
fn foo(&self);
}
trait ExplicitTrait {
fn foo(&self);
}
trait DisplayTrait {
fn foo(&self);
}
trait UnimplementedTrait {
fn foo(&self);
}
// Implicitly requires `T: Sized`.
impl<T> ImplicitTrait for T {
fn foo(&self) {}
}
// Explicitly requires `T: Sized`.
impl<T: Sized> ExplicitTrait for T {
fn foo(&self) {}
}
// Requires `T: Display`.
impl<T: Display> DisplayTrait for T {
fn foo(&self) {}
}
fn main() {
// `[u8]` does not implement `Sized`.
let x: &[u8] = &[];
ImplicitTrait::foo(x);
//~^ ERROR: the trait bound `[u8]: ImplicitTrait` is not satisfied [E0277]
ExplicitTrait::foo(x);
//~^ ERROR: the trait bound `[u8]: ExplicitTrait` is not satisfied [E0277]
// `UnimplementedTrait` has no implementations.
UnimplementedTrait::foo(x);
//~^ ERROR: the trait bound `[u8]: UnimplementedTrait` is not satisfied [E0277]
// `[u8; 0]` implements `Sized` but not `Display`.
let x: &[u8; 0] = &[];
DisplayTrait::foo(x);
//~^ ERROR: the trait bound `[u8; 0]: DisplayTrait` is not satisfied [E0277]
}