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
|
// 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 {}
|