|  | 
| 75 | 75 | /// ``` | 
| 76 | 76 | #[lang = "add"] | 
| 77 | 77 | #[stable(feature = "rust1", since = "1.0.0")] | 
| 78 |  | -#[rustc_on_unimplemented = "no implementation for `{Self} + {RHS}`"] | 
|  | 78 | +#[rustc_on_unimplemented( | 
|  | 79 | +    on( | 
|  | 80 | +        all(_Self="{integer}", RHS="{float}"), | 
|  | 81 | +        message="cannot add a float to an integer", | 
|  | 82 | +    ), | 
|  | 83 | +    on( | 
|  | 84 | +        all(_Self="{float}", RHS="{integer}"), | 
|  | 85 | +        message="cannot add an integer to a float", | 
|  | 86 | +    ), | 
|  | 87 | +    message="cannot add `{RHS}` to `{Self}`", | 
|  | 88 | +    label="no implementation for `{Self} + {RHS}`", | 
|  | 89 | +)] | 
| 79 | 90 | pub trait Add<RHS=Self> { | 
| 80 | 91 |     /// The resulting type after applying the `+` operator. | 
| 81 | 92 |     #[stable(feature = "rust1", since = "1.0.0")] | 
| @@ -170,7 +181,8 @@ add_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 } | 
| 170 | 181 | /// ``` | 
| 171 | 182 | #[lang = "sub"] | 
| 172 | 183 | #[stable(feature = "rust1", since = "1.0.0")] | 
| 173 |  | -#[rustc_on_unimplemented = "no implementation for `{Self} - {RHS}`"] | 
|  | 184 | +#[rustc_on_unimplemented(message="cannot substract `{RHS}` from `{Self}`", | 
|  | 185 | +                         label="no implementation for `{Self} - {RHS}`")] | 
| 174 | 186 | pub trait Sub<RHS=Self> { | 
| 175 | 187 |     /// The resulting type after applying the `-` operator. | 
| 176 | 188 |     #[stable(feature = "rust1", since = "1.0.0")] | 
| @@ -287,7 +299,8 @@ sub_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 } | 
| 287 | 299 | /// ``` | 
| 288 | 300 | #[lang = "mul"] | 
| 289 | 301 | #[stable(feature = "rust1", since = "1.0.0")] | 
| 290 |  | -#[rustc_on_unimplemented = "no implementation for `{Self} * {RHS}`"] | 
|  | 302 | +#[rustc_on_unimplemented(message="cannot multiply `{RHS}` to `{Self}`", | 
|  | 303 | +                         label="no implementation for `{Self} * {RHS}`")] | 
| 291 | 304 | pub trait Mul<RHS=Self> { | 
| 292 | 305 |     /// The resulting type after applying the `*` operator. | 
| 293 | 306 |     #[stable(feature = "rust1", since = "1.0.0")] | 
| @@ -408,7 +421,8 @@ mul_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 } | 
| 408 | 421 | /// ``` | 
| 409 | 422 | #[lang = "div"] | 
| 410 | 423 | #[stable(feature = "rust1", since = "1.0.0")] | 
| 411 |  | -#[rustc_on_unimplemented = "no implementation for `{Self} / {RHS}`"] | 
|  | 424 | +#[rustc_on_unimplemented(message="cannot divide `{Self}` by `{RHS}`", | 
|  | 425 | +                         label="no implementation for `{Self} / {RHS}`")] | 
| 412 | 426 | pub trait Div<RHS=Self> { | 
| 413 | 427 |     /// The resulting type after applying the `/` operator. | 
| 414 | 428 |     #[stable(feature = "rust1", since = "1.0.0")] | 
| @@ -490,7 +504,8 @@ div_impl_float! { f32 f64 } | 
| 490 | 504 | /// ``` | 
| 491 | 505 | #[lang = "rem"] | 
| 492 | 506 | #[stable(feature = "rust1", since = "1.0.0")] | 
| 493 |  | -#[rustc_on_unimplemented = "no implementation for `{Self} % {RHS}`"] | 
|  | 507 | +#[rustc_on_unimplemented(message="cannot mod `{Self}` by `{RHS}`", | 
|  | 508 | +                         label="no implementation for `{Self} % {RHS}`")] | 
| 494 | 509 | pub trait Rem<RHS=Self> { | 
| 495 | 510 |     /// The resulting type after applying the `%` operator. | 
| 496 | 511 |     #[stable(feature = "rust1", since = "1.0.0")] | 
| @@ -647,7 +662,8 @@ neg_impl_numeric! { isize i8 i16 i32 i64 i128 f32 f64 } | 
| 647 | 662 | /// ``` | 
| 648 | 663 | #[lang = "add_assign"] | 
| 649 | 664 | #[stable(feature = "op_assign_traits", since = "1.8.0")] | 
| 650 |  | -#[rustc_on_unimplemented = "no implementation for `{Self} += {Rhs}`"] | 
|  | 665 | +#[rustc_on_unimplemented(message="cannot add-assign `{Rhs}` to `{Self}`", | 
|  | 666 | +                         label="no implementation for `{Self} += {Rhs}`")] | 
| 651 | 667 | pub trait AddAssign<Rhs=Self> { | 
| 652 | 668 |     /// Performs the `+=` operation. | 
| 653 | 669 |     #[stable(feature = "op_assign_traits", since = "1.8.0")] | 
| @@ -700,7 +716,8 @@ add_assign_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 } | 
| 700 | 716 | /// ``` | 
| 701 | 717 | #[lang = "sub_assign"] | 
| 702 | 718 | #[stable(feature = "op_assign_traits", since = "1.8.0")] | 
| 703 |  | -#[rustc_on_unimplemented = "no implementation for `{Self} -= {Rhs}`"] | 
|  | 719 | +#[rustc_on_unimplemented(message="cannot substract-assign `{Rhs}` from `{Self}`", | 
|  | 720 | +                         label="no implementation for `{Self} -= {Rhs}`")] | 
| 704 | 721 | pub trait SubAssign<Rhs=Self> { | 
| 705 | 722 |     /// Performs the `-=` operation. | 
| 706 | 723 |     #[stable(feature = "op_assign_traits", since = "1.8.0")] | 
| @@ -744,7 +761,8 @@ sub_assign_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 } | 
| 744 | 761 | /// ``` | 
| 745 | 762 | #[lang = "mul_assign"] | 
| 746 | 763 | #[stable(feature = "op_assign_traits", since = "1.8.0")] | 
| 747 |  | -#[rustc_on_unimplemented = "no implementation for `{Self} *= {Rhs}`"] | 
|  | 764 | +#[rustc_on_unimplemented(message="cannot multiply-assign `{Rhs}` to `{Self}`", | 
|  | 765 | +                         label="no implementation for `{Self} *= {Rhs}`")] | 
| 748 | 766 | pub trait MulAssign<Rhs=Self> { | 
| 749 | 767 |     /// Performs the `*=` operation. | 
| 750 | 768 |     #[stable(feature = "op_assign_traits", since = "1.8.0")] | 
| @@ -788,7 +806,8 @@ mul_assign_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 } | 
| 788 | 806 | /// ``` | 
| 789 | 807 | #[lang = "div_assign"] | 
| 790 | 808 | #[stable(feature = "op_assign_traits", since = "1.8.0")] | 
| 791 |  | -#[rustc_on_unimplemented = "no implementation for `{Self} /= {Rhs}`"] | 
|  | 809 | +#[rustc_on_unimplemented(message="cannot divide-assign `{Self}` by `{Rhs}`", | 
|  | 810 | +                         label="no implementation for `{Self} /= {Rhs}`")] | 
| 792 | 811 | pub trait DivAssign<Rhs=Self> { | 
| 793 | 812 |     /// Performs the `/=` operation. | 
| 794 | 813 |     #[stable(feature = "op_assign_traits", since = "1.8.0")] | 
| @@ -835,7 +854,8 @@ div_assign_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 } | 
| 835 | 854 | /// ``` | 
| 836 | 855 | #[lang = "rem_assign"] | 
| 837 | 856 | #[stable(feature = "op_assign_traits", since = "1.8.0")] | 
| 838 |  | -#[rustc_on_unimplemented = "no implementation for `{Self} %= {Rhs}`"] | 
|  | 857 | +#[rustc_on_unimplemented(message="cannot mod-assign `{Self}` by `{Rhs}``", | 
|  | 858 | +                         label="no implementation for `{Self} %= {Rhs}`")] | 
| 839 | 859 | pub trait RemAssign<Rhs=Self> { | 
| 840 | 860 |     /// Performs the `%=` operation. | 
| 841 | 861 |     #[stable(feature = "op_assign_traits", since = "1.8.0")] | 
|  | 
0 commit comments