@@ -43,7 +43,6 @@ void test_enum_class() {
4343 FunctionalLang::Elm <= FunctionalLang::Haskell; // COMPLIANT
4444 FunctionalLang::Idris > FunctionalLang::SML; // COMPLIANT
4545 FunctionalLang::Haskell >= FunctionalLang::Idris; // COMPLIANT
46- FunctionalLang::FSharp &FunctionalLang::OCaml; // COMPLIANT
4746
4847 // arithmetic
4948 FunctionalLang::ML + 1 ; // NON_COMPLIANT
@@ -59,15 +58,16 @@ void test_enum_class() {
5958 !FunctionalLang::Scheme; // NON_COMPLIANT
6059
6160 // bitwise
62- FunctionalLang::Elm | FunctionalLang::Racket; // NON_COMPLIANT
63- ~FunctionalLang::Idris; // NON_COMPLIANT
64- FunctionalLang::ML ^ FunctionalLang::OCaml; // NON_COMPLIANT
65- FunctionalLang::OCaml >> 1 ; // NON_COMPLIANT
66- FunctionalLang::Lisp << 1 ; // NON_COMPLIANT
67- l &= FunctionalLang::OCaml; // NON_COMPLIANT
68- l ^= 1 ; // NON_COMPLIANT
69- l >>= 1 ; // NON_COMPLIANT
70- l <<= 1 ; // NON_COMPLIANT
61+ FunctionalLang::Elm | FunctionalLang::Racket; // NON_COMPLIANT
62+ ~FunctionalLang::Idris; // NON_COMPLIANT
63+ FunctionalLang::ML ^ FunctionalLang::OCaml; // NON_COMPLIANT
64+ FunctionalLang::OCaml >> 1 ; // NON_COMPLIANT
65+ FunctionalLang::Lisp << 1 ; // NON_COMPLIANT
66+ l &= FunctionalLang::OCaml; // NON_COMPLIANT
67+ l ^= 1 ; // NON_COMPLIANT
68+ l >>= 1 ; // NON_COMPLIANT
69+ l <<= 1 ; // NON_COMPLIANT
70+ FunctionalLang::FSharp &FunctionalLang::OCaml; // NON_COMPLIANT
7171}
7272
7373void test_enum_class_vars () {
@@ -79,7 +79,7 @@ void test_enum_class_vars() {
7979 a <= b; // COMPLIANT
8080 a > a; // COMPLIANT
8181 a >= a; // COMPLIANT
82- a &b; // COMPLIANT
82+ FunctionalLang *c = &a; // COMPLIANT
8383
8484 // arithmetic
8585 a + 1 ; // NON_COMPLIANT
@@ -100,4 +100,21 @@ void test_enum_class_vars() {
100100 a ^ b; // NON_COMPLIANT
101101 a >> 1 ; // NON_COMPLIANT
102102 a << 1 ; // NON_COMPLIANT
103+ a &b; // NON_COMPLIANT
104+ }
105+
106+ enum class byte : unsigned char {};
107+
108+ byte operator &(byte lhs, byte rhs) { return lhs; }
109+ byte operator |(byte lhs, byte rhs) { return lhs; }
110+ byte operator ^(byte lhs, byte rhs) { return lhs; }
111+ byte operator ~(byte lhs) { return lhs; }
112+ byte operator &=(byte lhs, byte rhs) { return lhs; }
113+ byte operator |=(byte lhs, byte rhs) { return lhs; }
114+
115+ void test_bitmasktype_enum_class () { // COMPLIANT - byte implements the
116+ // BitmaskType trait.
117+ byte one, two;
118+
119+ one &two;
103120}
0 commit comments