1212
1313#![ stable( feature = "rust1" , since = "1.0.0" ) ]
1414
15- use convert:: TryFrom ;
15+ use convert:: { Infallible , TryFrom } ;
1616use fmt;
1717use intrinsics;
1818use str:: FromStr ;
@@ -2507,16 +2507,24 @@ impl fmt::Display for TryFromIntError {
25072507 }
25082508}
25092509
2510+ #[ unstable( feature = "try_from" , issue = "33417" ) ]
2511+ impl From < Infallible > for TryFromIntError {
2512+ fn from ( infallible : Infallible ) -> TryFromIntError {
2513+ match infallible {
2514+ }
2515+ }
2516+ }
2517+
25102518// no possible bounds violation
25112519macro_rules! try_from_unbounded {
25122520 ( $source: ty, $( $target: ty) ,* ) => { $(
25132521 #[ unstable( feature = "try_from" , issue = "33417" ) ]
25142522 impl TryFrom <$source> for $target {
2515- type Error = TryFromIntError ;
2523+ type Error = Infallible ;
25162524
25172525 #[ inline]
2518- fn try_from( u : $source) -> Result <$target , TryFromIntError > {
2519- Ok ( u as $target)
2526+ fn try_from( value : $source) -> Result <Self , Self :: Error > {
2527+ Ok ( value as $target)
25202528 }
25212529 }
25222530 ) * }
@@ -2588,31 +2596,17 @@ macro_rules! rev {
25882596}
25892597
25902598/// intra-sign conversions
2591- try_from_unbounded ! ( u8 , u8 , u16 , u32 , u64 , u128 ) ;
2592- try_from_unbounded ! ( u16 , u16 , u32 , u64 , u128 ) ;
2593- try_from_unbounded ! ( u32 , u32 , u64 , u128 ) ;
2594- try_from_unbounded ! ( u64 , u64 , u128 ) ;
2595- try_from_unbounded ! ( u128 , u128 ) ;
25962599try_from_upper_bounded ! ( u16 , u8 ) ;
25972600try_from_upper_bounded ! ( u32 , u16 , u8 ) ;
25982601try_from_upper_bounded ! ( u64 , u32 , u16 , u8 ) ;
25992602try_from_upper_bounded ! ( u128 , u64 , u32 , u16 , u8 ) ;
26002603
2601- try_from_unbounded ! ( i8 , i8 , i16 , i32 , i64 , i128 ) ;
2602- try_from_unbounded ! ( i16 , i16 , i32 , i64 , i128 ) ;
2603- try_from_unbounded ! ( i32 , i32 , i64 , i128 ) ;
2604- try_from_unbounded ! ( i64 , i64 , i128 ) ;
2605- try_from_unbounded ! ( i128 , i128 ) ;
26062604try_from_both_bounded ! ( i16 , i8 ) ;
26072605try_from_both_bounded ! ( i32 , i16 , i8 ) ;
26082606try_from_both_bounded ! ( i64 , i32 , i16 , i8 ) ;
26092607try_from_both_bounded ! ( i128 , i64 , i32 , i16 , i8 ) ;
26102608
26112609// unsigned-to-signed
2612- try_from_unbounded ! ( u8 , i16 , i32 , i64 , i128 ) ;
2613- try_from_unbounded ! ( u16 , i32 , i64 , i128 ) ;
2614- try_from_unbounded ! ( u32 , i64 , i128 ) ;
2615- try_from_unbounded ! ( u64 , i128 ) ;
26162610try_from_upper_bounded ! ( u8 , i8 ) ;
26172611try_from_upper_bounded ! ( u16 , i8 , i16 ) ;
26182612try_from_upper_bounded ! ( u32 , i8 , i16 , i32 ) ;
@@ -2631,15 +2625,13 @@ try_from_both_bounded!(i64, u32, u16, u8);
26312625try_from_both_bounded ! ( i128 , u64 , u32 , u16 , u8 ) ;
26322626
26332627// usize/isize
2634- try_from_unbounded ! ( usize , usize ) ;
26352628try_from_upper_bounded ! ( usize , isize ) ;
26362629try_from_lower_bounded ! ( isize , usize ) ;
2637- try_from_unbounded ! ( isize , isize ) ;
26382630
26392631#[ cfg( target_pointer_width = "16" ) ]
26402632mod ptr_try_from_impls {
26412633 use super :: TryFromIntError ;
2642- use convert:: TryFrom ;
2634+ use convert:: { Infallible , TryFrom } ;
26432635
26442636 try_from_upper_bounded ! ( usize , u8 ) ;
26452637 try_from_unbounded ! ( usize , u16 , u32 , u64 , u128 ) ;
@@ -2651,21 +2643,21 @@ mod ptr_try_from_impls {
26512643 try_from_both_bounded ! ( isize , i8 ) ;
26522644 try_from_unbounded ! ( isize , i16 , i32 , i64 , i128 ) ;
26532645
2654- rev ! ( try_from_unbounded, usize , u8 , u16 ) ;
2646+ rev ! ( try_from_unbounded, usize , u16 ) ;
26552647 rev ! ( try_from_upper_bounded, usize , u32 , u64 , u128 ) ;
26562648 rev ! ( try_from_lower_bounded, usize , i8 , i16 ) ;
26572649 rev ! ( try_from_both_bounded, usize , i32 , i64 , i128 ) ;
26582650
26592651 rev ! ( try_from_unbounded, isize , u8 ) ;
26602652 rev ! ( try_from_upper_bounded, isize , u16 , u32 , u64 , u128 ) ;
2661- rev ! ( try_from_unbounded, isize , i8 , i16 ) ;
2653+ rev ! ( try_from_unbounded, isize , i16 ) ;
26622654 rev ! ( try_from_both_bounded, isize , i32 , i64 , i128 ) ;
26632655}
26642656
26652657#[ cfg( target_pointer_width = "32" ) ]
26662658mod ptr_try_from_impls {
26672659 use super :: TryFromIntError ;
2668- use convert:: TryFrom ;
2660+ use convert:: { Infallible , TryFrom } ;
26692661
26702662 try_from_upper_bounded ! ( usize , u8 , u16 ) ;
26712663 try_from_unbounded ! ( usize , u32 , u64 , u128 ) ;
@@ -2677,21 +2669,21 @@ mod ptr_try_from_impls {
26772669 try_from_both_bounded ! ( isize , i8 , i16 ) ;
26782670 try_from_unbounded ! ( isize , i32 , i64 , i128 ) ;
26792671
2680- rev ! ( try_from_unbounded, usize , u8 , u16 , u32 ) ;
2672+ rev ! ( try_from_unbounded, usize , u16 , u32 ) ;
26812673 rev ! ( try_from_upper_bounded, usize , u64 , u128 ) ;
26822674 rev ! ( try_from_lower_bounded, usize , i8 , i16 , i32 ) ;
26832675 rev ! ( try_from_both_bounded, usize , i64 , i128 ) ;
26842676
26852677 rev ! ( try_from_unbounded, isize , u8 , u16 ) ;
26862678 rev ! ( try_from_upper_bounded, isize , u32 , u64 , u128 ) ;
2687- rev ! ( try_from_unbounded, isize , i8 , i16 , i32 ) ;
2679+ rev ! ( try_from_unbounded, isize , i16 , i32 ) ;
26882680 rev ! ( try_from_both_bounded, isize , i64 , i128 ) ;
26892681}
26902682
26912683#[ cfg( target_pointer_width = "64" ) ]
26922684mod ptr_try_from_impls {
26932685 use super :: TryFromIntError ;
2694- use convert:: TryFrom ;
2686+ use convert:: { Infallible , TryFrom } ;
26952687
26962688 try_from_upper_bounded ! ( usize , u8 , u16 , u32 ) ;
26972689 try_from_unbounded ! ( usize , u64 , u128 ) ;
@@ -2703,14 +2695,14 @@ mod ptr_try_from_impls {
27032695 try_from_both_bounded ! ( isize , i8 , i16 , i32 ) ;
27042696 try_from_unbounded ! ( isize , i64 , i128 ) ;
27052697
2706- rev ! ( try_from_unbounded, usize , u8 , u16 , u32 , u64 ) ;
2698+ rev ! ( try_from_unbounded, usize , u16 , u32 , u64 ) ;
27072699 rev ! ( try_from_upper_bounded, usize , u128 ) ;
27082700 rev ! ( try_from_lower_bounded, usize , i8 , i16 , i32 , i64 ) ;
27092701 rev ! ( try_from_both_bounded, usize , i128 ) ;
27102702
27112703 rev ! ( try_from_unbounded, isize , u8 , u16 , u32 ) ;
27122704 rev ! ( try_from_upper_bounded, isize , u64 , u128 ) ;
2713- rev ! ( try_from_unbounded, isize , i8 , i16 , i32 , i64 ) ;
2705+ rev ! ( try_from_unbounded, isize , i16 , i32 , i64 ) ;
27142706 rev ! ( try_from_both_bounded, isize , i128 ) ;
27152707}
27162708
0 commit comments