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
|
// Operator precedence of type ascription
// Type ascription has very high precedence, the same as operator `as`
#![feature(type_ascription)]
use std::ops::*;
struct S;
struct Z;
impl Add<Z> for S {
type Output = S;
fn add(self, _rhs: Z) -> S { panic!() }
}
impl Mul<Z> for S {
type Output = S;
fn mul(self, _rhs: Z) -> S { panic!() }
}
impl Neg for S {
type Output = Z;
fn neg(self) -> Z { panic!() }
}
impl Deref for S {
type Target = Z;
fn deref(&self) -> &Z { panic!() }
}
fn test1() {
&S: &S; //~ ERROR expected one of
(&S): &S;
&(S: &S);
}
fn test2() {
*(S: Z); //~ ERROR expected identifier
}
fn test3() {
-(S: Z); //~ ERROR expected identifier
}
fn test4() {
(S + Z): Z; //~ ERROR expected one of
}
fn test5() {
(S * Z): Z; //~ ERROR expected one of
}
fn test6() {
S .. S: S; //~ ERROR expected identifier, found `:`
}
fn test7() {
(S .. S): S; //~ ERROR expected one of
}
fn main() {}
|