| //@ run-pass |
| |
| #![deny(dead_code)] |
| |
| // use different types / traits to test all combinations |
| |
| trait Const { |
| const C: (); |
| } |
| |
| trait StaticFn { |
| fn sfn(); |
| } |
| |
| struct ConstStruct; |
| struct StaticFnStruct; |
| |
| enum ConstEnum {} |
| enum StaticFnEnum {} |
| |
| struct AliasedConstStruct; |
| struct AliasedStaticFnStruct; |
| |
| enum AliasedConstEnum {} |
| enum AliasedStaticFnEnum {} |
| |
| type AliasConstStruct = AliasedConstStruct; |
| type AliasStaticFnStruct = AliasedStaticFnStruct; |
| type AliasConstEnum = AliasedConstEnum; |
| type AliasStaticFnEnum = AliasedStaticFnEnum; |
| |
| macro_rules! impl_Const {($($T:ident),*) => {$( |
| impl Const for $T { |
| const C: () = (); |
| } |
| )*}} |
| |
| macro_rules! impl_StaticFn {($($T:ident),*) => {$( |
| impl StaticFn for $T { |
| fn sfn() {} |
| } |
| )*}} |
| |
| impl_Const!(ConstStruct, ConstEnum, AliasedConstStruct, AliasedConstEnum); |
| impl_StaticFn!(StaticFnStruct, StaticFnEnum, AliasedStaticFnStruct, AliasedStaticFnEnum); |
| |
| fn main() { |
| let () = ConstStruct::C; |
| let () = ConstEnum::C; |
| |
| StaticFnStruct::sfn(); |
| StaticFnEnum::sfn(); |
| |
| let () = AliasConstStruct::C; |
| let () = AliasConstEnum::C; |
| |
| AliasStaticFnStruct::sfn(); |
| AliasStaticFnEnum::sfn(); |
| } |