llvm/clang/test/SemaCXX/enum-increment.cpp

// RUN: %clang_cc1 -fsyntax-only %s -verify

enum A { A1, A2, A3 };
void test() {
  A a;
  a++;  // expected-error{{cannot increment expression of enum type 'A'}}
  a--;  // expected-error{{cannot decrement expression of enum type 'A'}}
  ++a;  // expected-error{{cannot increment expression of enum type 'A'}}
  --a;  // expected-error{{cannot decrement expression of enum type 'A'}}
}

enum B {B1, B2};
inline B &operator++ (B &b) { b = B((int)b+1); return b; }
inline B operator++ (B &b, int) { B ret = b; ++b; return b; }

void foo(enum B b) { ++b; b++; }