1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
//@ run-pass
// Check that global bounds result in the expected choice of associated type
#![feature(trivial_bounds)]
#![allow(unused)]
struct B;
trait A {
type X;
fn get_x() -> Self::X;
}
impl A for B {
type X = u8;
fn get_x() -> u8 { 0 }
}
fn underspecified_bound() -> u8
where
B: A //~ WARNING trivial_bounds
{
B::get_x()
}
fn inconsistent_bound() -> i32
where
B: A<X = i32> //~ WARNING trivial_bounds
{
B::get_x()
}
fn redundant_bound() -> u8
where
B: A<X = u8> //~ WARNING trivial_bounds
{
B::get_x()
}
fn inconsistent_dup_bound() -> i32
where
B: A<X = i32> + A
//~^ WARNING trivial_bounds
//~| WARNING trivial_bounds
{
B::get_x()
}
fn redundant_dup_bound() -> u8
where
B: A<X = u8> + A
//~^ WARNING trivial_bounds
//~| WARNING trivial_bounds
{
B::get_x()
}
fn main () {}
|