rust/tests/ui/associated-inherent-types/dispatch-on-self-type-1.rs

40 lines
809 B
Rust

//@ check-pass
#![feature(inherent_associated_types, auto_traits, negative_impls)]
#![allow(incomplete_features)]
use std::cmp::Ordering;
// Check that inherent associated types are dispatched on the concrete Self type.
struct Select<T, U>(T, U);
impl<T: Ordinary, U: Ordinary> Select<T, U> {
type Type = ();
}
impl<T: Ordinary> Select<T, Special> {
type Type = bool;
}
impl<T: Ordinary> Select<Special, T> {
type Type = Ordering;
}
impl Select<Special, Special> {
type Type = (bool, bool);
}
fn main() {
let _: Select<String, Special>::Type = false;
let _: Select<Special, Special>::Type = (true, false);
let _: Select<Special, u8>::Type = Ordering::Equal;
let _: Select<i128, ()>::Type = ();
}
enum Special {}
impl !Ordinary for Special {}
auto trait Ordinary {}