88// option. This file may not be copied, modified, or distributed
99// except according to those terms.
1010
11- // `#[derive(Trait)]` works for empty structs/variants with braces
11+ // `#[derive(Trait)]` works for empty structs/variants with braces or parens.
1212
13+ #![ feature( relaxed_adts) ]
1314#![ feature( rustc_private) ]
1415
1516extern crate serialize as rustc_serialize;
@@ -18,11 +19,16 @@ extern crate serialize as rustc_serialize;
1819 Default , Debug , RustcEncodable , RustcDecodable ) ]
1920struct S { }
2021
22+ #[ derive( Clone , Copy , PartialEq , Eq , PartialOrd , Ord , Hash ,
23+ Default , Debug , RustcEncodable , RustcDecodable ) ]
24+ struct Z ( ) ;
25+
2126#[ derive( Clone , Copy , PartialEq , Eq , PartialOrd , Ord , Hash ,
2227 Debug , RustcEncodable , RustcDecodable ) ]
2328enum E {
2429 V { } ,
2530 U ,
31+ W ( ) ,
2632}
2733
2834fn main ( ) {
@@ -34,11 +40,27 @@ fn main() {
3440 assert ! ( !( s < s1) ) ;
3541 assert_eq ! ( format!( "{:?}" , s) , "S" ) ;
3642
43+ let z = Z ( ) ;
44+ let z1 = z;
45+ let z2 = z. clone ( ) ;
46+ assert_eq ! ( z, z1) ;
47+ assert_eq ! ( z, z2) ;
48+ assert ! ( !( z < z1) ) ;
49+ assert_eq ! ( format!( "{:?}" , z) , "Z" ) ;
50+
3751 let e = E :: V { } ;
3852 let e1 = e;
3953 let e2 = e. clone ( ) ;
4054 assert_eq ! ( e, e1) ;
4155 assert_eq ! ( e, e2) ;
4256 assert ! ( !( e < e1) ) ;
4357 assert_eq ! ( format!( "{:?}" , e) , "V" ) ;
58+
59+ let e = E :: W ( ) ;
60+ let e1 = e;
61+ let e2 = e. clone ( ) ;
62+ assert_eq ! ( e, e1) ;
63+ assert_eq ! ( e, e2) ;
64+ assert ! ( !( e < e1) ) ;
65+ assert_eq ! ( format!( "{:?}" , e) , "W" ) ;
4466}
0 commit comments