23 enum class ClassEnum
{
28 template <class P
> struct ParamTraits
;
30 // Simplified EnumSerializer etc. from IPCMessageUtils.h
31 template <typename E
, typename EnumValidator
>
32 struct EnumSerializer
{
39 class ContiguousEnumValidator
45 struct ContiguousEnumSerializer
47 ContiguousEnumValidator
<E
, MinLegal
, HighBound
>>
50 // Typical ParamTraits implementation that should be avoided
52 struct ParamTraits
<ClassEnum
> // expected-error {{Custom ParamTraits implementation for an enum type}} expected-note {{Please use a helper class for example ContiguousEnumSerializer}}
54 typedef ClassEnum paramType
;
58 struct ParamTraits
<enum RawEnum
> // expected-error {{Custom ParamTraits implementation for an enum type}} expected-note {{Please use a helper class for example ContiguousEnumSerializer}}
60 typedef enum RawEnum paramType
;
64 struct ParamTraits
<BadEnum
> // expected-error {{Custom ParamTraits implementation for an enum type}} expected-note {{Please use a helper class for example ContiguousEnumSerializer}}
66 typedef BadEnum paramType
;
69 // Make sure the analysis catches nested typedefs
70 typedef NestedBadEnum NestedDefLevel1
;
71 typedef NestedDefLevel1 NestedDefLevel2
;
74 struct ParamTraits
<NestedDefLevel2
> // expected-error {{Custom ParamTraits implementation for an enum type}} expected-note {{Please use a helper class for example ContiguousEnumSerializer}}
76 typedef NestedDefLevel2 paramType
;
79 // Make sure a non enum typedef is not accidentally flagged
80 typedef int IntTypedef
;
83 struct ParamTraits
<IntTypedef
>
85 typedef IntTypedef paramType
;
88 // Make sure ParamTraits using helper classes are not flagged
90 struct ParamTraits
<GoodEnum
>
91 : public ContiguousEnumSerializer
<GoodEnum
,