3131#[ lang = "not" ]
3232#[ stable( feature = "rust1" , since = "1.0.0" ) ]
3333#[ doc( alias = "!" ) ]
34+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
35+ #[ const_trait]
3436pub trait Not {
3537 /// The resulting type after applying the `!` operator.
3638 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -54,7 +56,8 @@ pub trait Not {
5456macro_rules! not_impl {
5557 ( $( $t: ty) * ) => ( $(
5658 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
57- impl Not for $t {
59+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
60+ impl const Not for $t {
5861 type Output = $t;
5962
6063 #[ inline]
@@ -68,7 +71,8 @@ macro_rules! not_impl {
6871not_impl ! { bool usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 }
6972
7073#[ stable( feature = "not_never" , since = "1.60.0" ) ]
71- impl Not for ! {
74+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
75+ impl const Not for ! {
7276 type Output = !;
7377
7478 #[ inline]
@@ -141,6 +145,8 @@ impl Not for ! {
141145 message = "no implementation for `{Self} & {Rhs}`" ,
142146 label = "no implementation for `{Self} & {Rhs}`"
143147) ]
148+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
149+ #[ const_trait]
144150pub trait BitAnd < Rhs = Self > {
145151 /// The resulting type after applying the `&` operator.
146152 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -164,7 +170,8 @@ pub trait BitAnd<Rhs = Self> {
164170macro_rules! bitand_impl {
165171 ( $( $t: ty) * ) => ( $(
166172 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
167- impl BitAnd for $t {
173+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
174+ impl const BitAnd for $t {
168175 type Output = $t;
169176
170177 #[ inline]
@@ -241,6 +248,8 @@ bitand_impl! { bool usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 }
241248 message = "no implementation for `{Self} | {Rhs}`" ,
242249 label = "no implementation for `{Self} | {Rhs}`"
243250) ]
251+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
252+ #[ const_trait]
244253pub trait BitOr < Rhs = Self > {
245254 /// The resulting type after applying the `|` operator.
246255 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -264,7 +273,8 @@ pub trait BitOr<Rhs = Self> {
264273macro_rules! bitor_impl {
265274 ( $( $t: ty) * ) => ( $(
266275 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
267- impl BitOr for $t {
276+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
277+ impl const BitOr for $t {
268278 type Output = $t;
269279
270280 #[ inline]
@@ -341,6 +351,8 @@ bitor_impl! { bool usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 }
341351 message = "no implementation for `{Self} ^ {Rhs}`" ,
342352 label = "no implementation for `{Self} ^ {Rhs}`"
343353) ]
354+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
355+ #[ const_trait]
344356pub trait BitXor < Rhs = Self > {
345357 /// The resulting type after applying the `^` operator.
346358 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -364,7 +376,8 @@ pub trait BitXor<Rhs = Self> {
364376macro_rules! bitxor_impl {
365377 ( $( $t: ty) * ) => ( $(
366378 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
367- impl BitXor for $t {
379+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
380+ impl const BitXor for $t {
368381 type Output = $t;
369382
370383 #[ inline]
@@ -440,6 +453,8 @@ bitxor_impl! { bool usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 }
440453 message = "no implementation for `{Self} << {Rhs}`" ,
441454 label = "no implementation for `{Self} << {Rhs}`"
442455) ]
456+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
457+ #[ const_trait]
443458pub trait Shl < Rhs = Self > {
444459 /// The resulting type after applying the `<<` operator.
445460 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -461,7 +476,8 @@ pub trait Shl<Rhs = Self> {
461476macro_rules! shl_impl {
462477 ( $t: ty, $f: ty) => {
463478 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
464- impl Shl <$f> for $t {
479+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
480+ impl const Shl <$f> for $t {
465481 type Output = $t;
466482
467483 #[ inline]
@@ -558,6 +574,8 @@ shl_impl_all! { u8 u16 u32 u64 u128 usize i8 i16 i32 i64 i128 isize }
558574 message = "no implementation for `{Self} >> {Rhs}`" ,
559575 label = "no implementation for `{Self} >> {Rhs}`"
560576) ]
577+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
578+ #[ const_trait]
561579pub trait Shr < Rhs = Self > {
562580 /// The resulting type after applying the `>>` operator.
563581 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -579,7 +597,8 @@ pub trait Shr<Rhs = Self> {
579597macro_rules! shr_impl {
580598 ( $t: ty, $f: ty) => {
581599 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
582- impl Shr <$f> for $t {
600+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
601+ impl const Shr <$f> for $t {
583602 type Output = $t;
584603
585604 #[ inline]
@@ -685,6 +704,8 @@ shr_impl_all! { u8 u16 u32 u64 u128 usize i8 i16 i32 i64 i128 isize }
685704 message = "no implementation for `{Self} &= {Rhs}`" ,
686705 label = "no implementation for `{Self} &= {Rhs}`"
687706) ]
707+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
708+ #[ const_trait]
688709pub trait BitAndAssign < Rhs = Self > {
689710 /// Performs the `&=` operation.
690711 ///
@@ -714,7 +735,8 @@ pub trait BitAndAssign<Rhs = Self> {
714735macro_rules! bitand_assign_impl {
715736 ( $( $t: ty) +) => ( $(
716737 #[ stable( feature = "op_assign_traits" , since = "1.8.0" ) ]
717- impl BitAndAssign for $t {
738+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
739+ impl const BitAndAssign for $t {
718740 #[ inline]
719741 fn bitand_assign( & mut self , other: $t) { * self &= other }
720742 }
@@ -756,6 +778,8 @@ bitand_assign_impl! { bool usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 }
756778 message = "no implementation for `{Self} |= {Rhs}`" ,
757779 label = "no implementation for `{Self} |= {Rhs}`"
758780) ]
781+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
782+ #[ const_trait]
759783pub trait BitOrAssign < Rhs = Self > {
760784 /// Performs the `|=` operation.
761785 ///
@@ -785,7 +809,8 @@ pub trait BitOrAssign<Rhs = Self> {
785809macro_rules! bitor_assign_impl {
786810 ( $( $t: ty) +) => ( $(
787811 #[ stable( feature = "op_assign_traits" , since = "1.8.0" ) ]
788- impl BitOrAssign for $t {
812+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
813+ impl const BitOrAssign for $t {
789814 #[ inline]
790815 fn bitor_assign( & mut self , other: $t) { * self |= other }
791816 }
@@ -827,6 +852,8 @@ bitor_assign_impl! { bool usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 }
827852 message = "no implementation for `{Self} ^= {Rhs}`" ,
828853 label = "no implementation for `{Self} ^= {Rhs}`"
829854) ]
855+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
856+ #[ const_trait]
830857pub trait BitXorAssign < Rhs = Self > {
831858 /// Performs the `^=` operation.
832859 ///
@@ -856,7 +883,8 @@ pub trait BitXorAssign<Rhs = Self> {
856883macro_rules! bitxor_assign_impl {
857884 ( $( $t: ty) +) => ( $(
858885 #[ stable( feature = "op_assign_traits" , since = "1.8.0" ) ]
859- impl BitXorAssign for $t {
886+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
887+ impl const BitXorAssign for $t {
860888 #[ inline]
861889 fn bitxor_assign( & mut self , other: $t) { * self ^= other }
862890 }
@@ -896,6 +924,8 @@ bitxor_assign_impl! { bool usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 }
896924 message = "no implementation for `{Self} <<= {Rhs}`" ,
897925 label = "no implementation for `{Self} <<= {Rhs}`"
898926) ]
927+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
928+ #[ const_trait]
899929pub trait ShlAssign < Rhs = Self > {
900930 /// Performs the `<<=` operation.
901931 ///
@@ -917,7 +947,8 @@ pub trait ShlAssign<Rhs = Self> {
917947macro_rules! shl_assign_impl {
918948 ( $t: ty, $f: ty) => {
919949 #[ stable( feature = "op_assign_traits" , since = "1.8.0" ) ]
920- impl ShlAssign <$f> for $t {
950+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
951+ impl const ShlAssign <$f> for $t {
921952 #[ inline]
922953 #[ rustc_inherit_overflow_checks]
923954 fn shl_assign( & mut self , other: $f) {
@@ -978,6 +1009,8 @@ shl_assign_impl_all! { u8 u16 u32 u64 u128 usize i8 i16 i32 i64 i128 isize }
9781009 message = "no implementation for `{Self} >>= {Rhs}`" ,
9791010 label = "no implementation for `{Self} >>= {Rhs}`"
9801011) ]
1012+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
1013+ #[ const_trait]
9811014pub trait ShrAssign < Rhs = Self > {
9821015 /// Performs the `>>=` operation.
9831016 ///
@@ -999,7 +1032,8 @@ pub trait ShrAssign<Rhs = Self> {
9991032macro_rules! shr_assign_impl {
10001033 ( $t: ty, $f: ty) => {
10011034 #[ stable( feature = "op_assign_traits" , since = "1.8.0" ) ]
1002- impl ShrAssign <$f> for $t {
1035+ #[ rustc_const_unstable( feature = "const_bitops" , issue = "144119" ) ]
1036+ impl const ShrAssign <$f> for $t {
10031037 #[ inline]
10041038 #[ rustc_inherit_overflow_checks]
10051039 fn shr_assign( & mut self , other: $f) {
0 commit comments