18
18
irrefutable_let_patterns
19
19
) ]
20
20
21
+ use self :: Enum :: Generic ;
21
22
use anyhow:: { anyhow, ensure, Chain , Error , Result } ;
22
- use std:: fmt:: Debug ;
23
+ use std:: fmt:: { self , Debug } ;
23
24
use std:: iter;
24
25
use std:: marker:: { PhantomData , PhantomData as P } ;
26
+ use std:: mem;
25
27
use std:: ops:: Add ;
26
28
use std:: ptr;
27
29
@@ -44,6 +46,24 @@ trait Trait: Sized {
44
46
45
47
impl < T > Trait for T { }
46
48
49
+ enum Enum < T : ?Sized > {
50
+ #[ allow( dead_code) ]
51
+ Thing ( PhantomData < T > ) ,
52
+ Generic ,
53
+ }
54
+
55
+ impl < T : ?Sized > PartialEq for Enum < T > {
56
+ fn eq ( & self , rhs : & Self ) -> bool {
57
+ mem:: discriminant ( self ) == mem:: discriminant ( rhs)
58
+ }
59
+ }
60
+
61
+ impl < T : ?Sized > Debug for Enum < T > {
62
+ fn fmt ( & self , formatter : & mut fmt:: Formatter ) -> fmt:: Result {
63
+ formatter. write_str ( "Generic" )
64
+ }
65
+ }
66
+
47
67
#[ track_caller]
48
68
fn assert_err < T : Debug > ( result : impl FnOnce ( ) -> Result < T > , expected : & ' static str ) {
49
69
let actual = result ( ) . unwrap_err ( ) . to_string ( ) ;
@@ -356,27 +376,27 @@ fn test_path() {
356
376
let test = || Ok ( ensure ! ( E :: U :: <u8 , >>E :: U ) ) ;
357
377
assert_err ( test, "Condition failed: `E::U::<u8> > E::U` (U vs U)" ) ;
358
378
359
- let test = || Ok ( ensure ! ( PhantomData :: <dyn Debug + Sync > != PhantomData ) ) ;
379
+ let test = || Ok ( ensure ! ( Generic :: <dyn Debug + Sync > != Generic ) ) ;
360
380
assert_err (
361
381
test,
362
- "Condition failed: `PhantomData ::<dyn Debug + Sync> != PhantomData` " ,
382
+ "Condition failed: `Generic ::<dyn Debug + Sync> != Generic` (Generic vs Generic) " ,
363
383
) ;
364
384
365
- let test = || Ok ( ensure ! ( PhantomData :: <dyn Fn ( ) + Sync > != PhantomData ) ) ;
385
+ let test = || Ok ( ensure ! ( Generic :: <dyn Fn ( ) + Sync > != Generic ) ) ;
366
386
assert_err (
367
387
test,
368
- "Condition failed: `PhantomData ::<dyn Fn() + Sync> != PhantomData` " ,
388
+ "Condition failed: `Generic ::<dyn Fn() + Sync> != Generic` (Generic vs Generic) " ,
369
389
) ;
370
390
371
391
#[ rustfmt:: skip]
372
392
let test = || {
373
393
Ok ( ensure ! (
374
- PhantomData :: <dyn Fn :: ( ) + :: std:: marker:: Sync > != PhantomData
394
+ Generic :: <dyn Fn :: ( ) + :: std:: marker:: Sync > != Generic
375
395
) )
376
396
} ;
377
397
assert_err (
378
398
test,
379
- "Condition failed: `PhantomData ::<dyn Fn() + ::std::marker::Sync> != PhantomData` " ,
399
+ "Condition failed: `Generic ::<dyn Fn() + ::std::marker::Sync> != Generic` (Generic vs Generic) " ,
380
400
) ;
381
401
}
382
402
0 commit comments