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() );
  }
  
}