#include <iostream>
using namespace std;
enum class E { e0, e1, e2, e3, };
static constexpr E get(int S)
{
switch(S)
{
case 0: return E::e0;
case 1: return E::e1;
case 2: return E::e2;
default: return E::e3;
}
}
template <int S>
class C {
public:
static const E e = get(S);
void out() const { cout << "e = " << int(e) << endl; }
};
int main(int argc, const char * argv[])
{
C<1>().out();
C<2>().out();
C<123>().out();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmVudW0gY2xhc3MgRSB7IGUwLCBlMSwgZTIsIGUzLCB9OwoKc3RhdGljIGNvbnN0ZXhwciBFIGdldChpbnQgUykKewogICAgc3dpdGNoKFMpCiAgICB7CiAgICBjYXNlIDA6IHJldHVybiBFOjplMDsKICAgIGNhc2UgMTogcmV0dXJuIEU6OmUxOwogICAgY2FzZSAyOiByZXR1cm4gRTo6ZTI7CiAgICBkZWZhdWx0OiByZXR1cm4gRTo6ZTM7CiAgICB9Cn0KCnRlbXBsYXRlIDxpbnQgUz4KY2xhc3MgQyB7CnB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBFIGUgPSBnZXQoUyk7CiAgICB2b2lkIG91dCgpIGNvbnN0IHsgY291dCA8PCAiZSA9ICIgPDwgaW50KGUpIDw8IGVuZGw7IH0KCn07CgppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKewogICAgQzwxPigpLm91dCgpOwogICAgQzwyPigpLm91dCgpOwogICAgQzwxMjM+KCkub3V0KCk7Cn0K