11use core:: slice:: ChunksMut ;
2- use once_cell :: unsync :: OnceCell ;
2+ use core :: cell :: OnceCell ;
33
44pub ( crate ) struct ThreadLocal < T > ( OnceCell < T > ) ;
55
@@ -15,8 +15,9 @@ impl<T> ThreadLocal<T> {
1515 }
1616
1717 #[ inline( always) ]
18- pub fn get_or_try < E > ( & self , f : impl FnOnce ( ) -> Result < T , E > ) -> Result < & T , E > {
19- self . 0 . get_or_try_init ( f)
18+ pub fn get_or_try < E > ( & self , f : impl FnOnce ( ) -> Result < T , E > ) -> Result < & T , core:: convert:: Infallible > {
19+ // https://github.com/rust-lang/rust/issues/109737
20+ Ok ( self . 0 . get_or_init ( move || f ( ) . ok ( ) . unwrap ( ) ) )
2021 }
2122}
2223
@@ -40,19 +41,19 @@ impl<T> FakeRayonIter for T where Self: Sized {
4041}
4142
4243pub ( crate ) trait FakeRayonIntoIter < T > {
43- fn par_chunks_mut ( & mut self , chunk_size : usize ) -> ChunksMut < T > ;
44+ fn par_chunks_mut ( & mut self , chunk_size : usize ) -> ChunksMut < ' _ , T > ;
4445}
4546
4647impl < ' a , T > FakeRayonIntoIter < T > for & ' a mut [ T ] {
4748 #[ inline( always) ]
48- fn par_chunks_mut ( & mut self , chunk_size : usize ) -> ChunksMut < T > {
49+ fn par_chunks_mut ( & mut self , chunk_size : usize ) -> ChunksMut < ' _ , T > {
4950 self . chunks_mut ( chunk_size)
5051 }
5152}
5253
5354impl < ' a , T > FakeRayonIntoIter < T > for Box < [ T ] > {
5455 #[ inline( always) ]
55- fn par_chunks_mut ( & mut self , chunk_size : usize ) -> ChunksMut < T > {
56+ fn par_chunks_mut ( & mut self , chunk_size : usize ) -> ChunksMut < ' _ , T > {
5657 self . chunks_mut ( chunk_size)
5758 }
5859}
0 commit comments