mirror of https://github.com/rust-lang/rust
40 lines
809 B
Rust
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 {}
|