2018-06-08 11:00:26 -05:00
|
|
|
// 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
|
2019-11-05 18:00:00 -06:00
|
|
|
B: A //~ WARNING trivial_bounds
|
2018-06-08 11:00:26 -05:00
|
|
|
{
|
|
|
|
B::get_x()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn inconsistent_bound() -> i32
|
|
|
|
where
|
2019-11-05 18:00:00 -06:00
|
|
|
B: A<X = i32> //~ WARNING trivial_bounds
|
2018-06-08 11:00:26 -05:00
|
|
|
{
|
|
|
|
B::get_x()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn redundant_bound() -> u8
|
|
|
|
where
|
2019-11-05 18:00:00 -06:00
|
|
|
B: A<X = u8> //~ WARNING trivial_bounds
|
2018-06-08 11:00:26 -05:00
|
|
|
{
|
|
|
|
B::get_x()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn inconsistent_dup_bound() -> i32
|
|
|
|
where
|
|
|
|
B: A<X = i32> + A
|
2019-11-05 18:00:00 -06:00
|
|
|
//~^ WARNING trivial_bounds
|
|
|
|
//~| WARNING trivial_bounds
|
2018-06-08 11:00:26 -05:00
|
|
|
{
|
|
|
|
B::get_x()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn redundant_dup_bound() -> u8
|
|
|
|
where
|
|
|
|
B: A<X = u8> + A
|
2019-11-05 18:00:00 -06:00
|
|
|
//~^ WARNING trivial_bounds
|
|
|
|
//~| WARNING trivial_bounds
|
2018-06-08 11:00:26 -05:00
|
|
|
{
|
|
|
|
B::get_x()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main () {}
|