enum class MouseButton { Left, Middle, Right, NUM_BUTTONS }; map< MouseButton, string > mouseButtonName = { { MouseButton::Left, "Left" }, { MouseButton::Middle, "Middle" }, { MouseButton::Right, "Right" }, }; // Preincrement inline MouseButton operator++( MouseButton& mouseButton ) { mouseButton = (MouseButton)((int)mouseButton + 1); return mouseButton; } // Postincrement inline MouseButton operator++( MouseButton& mouseButton, int postIncrement ) { MouseButton oldValue = mouseButton; mouseButton = (MouseButton)((int)mouseButton + 1); return oldValue; } int main() { for( MouseButton mb = MouseButton::Left; mb < MouseButton::NUM_BUTTONS; mb++ ) { puts( mouseButtonName[ mb ].c_str() ); } }