#include <stdio.h>
struct Foo {
enum { VAL_A = 0, VAL_B = 1, VAL_C = 2 };
};
struct Bar {
enum { VAL_A = 10, VAL_B = 11, VAL_C = 12 };
};
template<typename T>
void TestSwitch(int op)
{
printf("%u: ", op);
switch (op) {
case T::VAL_A: printf("aaa\n"); break;
case T::VAL_B: printf("bbb\n"); break;
case T::VAL_C: printf("ccc\n"); break;
default: break;
}
}
int main() {
TestSwitch<Foo>(0);
TestSwitch<Bar>(12);
}
ICAgICNpbmNsdWRlIDxzdGRpby5oPgoKICAgIHN0cnVjdCBGb28gewogICAgICAgIGVudW0geyBWQUxfQSA9IDAsIFZBTF9CID0gMSwgVkFMX0MgPSAyIH07CiAgICB9OwoKICAgIHN0cnVjdCBCYXIgewogICAgICAgIGVudW0geyBWQUxfQSA9IDEwLCBWQUxfQiA9IDExLCBWQUxfQyA9IDEyIH07CiAgICB9OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICB2b2lkIFRlc3RTd2l0Y2goaW50IG9wKQogICAgewogICAgICAgIHByaW50ZigiJXU6ICIsIG9wKTsKICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgICAgIGNhc2UgVDo6VkFMX0E6IHByaW50ZigiYWFhXG4iKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgVDo6VkFMX0I6IHByaW50ZigiYmJiXG4iKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgVDo6VkFMX0M6IHByaW50ZigiY2NjXG4iKTsgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICBpbnQgbWFpbigpIHsKICAgICAgICBUZXN0U3dpdGNoPEZvbz4oMCk7CiAgICAgICAgVGVzdFN3aXRjaDxCYXI+KDEyKTsKICAgIH0K