#include <iostream>
enum Traffic_light
{
green,
yellow,
red
};
// prefix increment
Traffic_light& operator++(Traffic_light& t)
{
switch (t)
{
case Traffic_light::green:
return t = Traffic_light::yellow;
case Traffic_light::yellow:
return t = Traffic_light::red;
case Traffic_light::red:
return t = Traffic_light::green;
}
}
// postfix increment
Traffic_light operator++(Traffic_light& t, int)
{
Traffic_light tmp = t;
++t;
return tmp;
}
int main(int argc, const char * argv[])
{
Traffic_light light = Traffic_light::red;
std::cout << "Light is " << light << std::endl;
++light;
std::cout << "Now Light is " << light << std::endl;
light++;
std::cout << "And now " << light << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKZW51bSBUcmFmZmljX2xpZ2h0IAp7IAoJZ3JlZW4sIAoJeWVsbG93LCAKCXJlZAp9OwoKLy8gcHJlZml4IGluY3JlbWVudApUcmFmZmljX2xpZ2h0JiBvcGVyYXRvcisrKFRyYWZmaWNfbGlnaHQmIHQpIAp7CiAgICBzd2l0Y2ggKHQpIAogICAgewogICAgY2FzZSBUcmFmZmljX2xpZ2h0OjpncmVlbjoKICAgIAlyZXR1cm4gdCA9IFRyYWZmaWNfbGlnaHQ6OnllbGxvdzsKCWNhc2UgVHJhZmZpY19saWdodDo6eWVsbG93OgoJCXJldHVybiB0ID0gVHJhZmZpY19saWdodDo6cmVkOwoJY2FzZSBUcmFmZmljX2xpZ2h0OjpyZWQ6CgkJcmV0dXJuIHQgPSBUcmFmZmljX2xpZ2h0OjpncmVlbjsKCX0KfQoKLy8gcG9zdGZpeCBpbmNyZW1lbnQKVHJhZmZpY19saWdodCBvcGVyYXRvcisrKFRyYWZmaWNfbGlnaHQmIHQsIGludCkKewoJVHJhZmZpY19saWdodCB0bXAgPSB0OwoJKyt0OwoJcmV0dXJuIHRtcDsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBhcmd2W10pCnsKICAgIFRyYWZmaWNfbGlnaHQgbGlnaHQgPSBUcmFmZmljX2xpZ2h0OjpyZWQ7CglzdGQ6OmNvdXQgPDwgIkxpZ2h0IGlzICIgPDwgbGlnaHQgPDwgc3RkOjplbmRsOwoJKytsaWdodDsKCXN0ZDo6Y291dCA8PCAiTm93IExpZ2h0IGlzICIgPDwgbGlnaHQgPDwgc3RkOjplbmRsOwoJbGlnaHQrKzsKCXN0ZDo6Y291dCA8PCAiQW5kIG5vdyAiIDw8IGxpZ2h0IDw8IHN0ZDo6ZW5kbDsKICAgIHJldHVybiAwOwp9