In addition to Edward's answer. ## Use `enum class` instead of `enum` ## ``` enum class Outcome { user, bot, draw }; enum class Choice { rock, paper, scissors }; ``` This does two things: * Inject the names into the `enum class`, rather than into the surrounding namespace. (You then have to write `Outcome::user` instead of `user`, until C++20's `using enum` is available) * Remove any implicit conversion to/from the underlying type. ### A better random generation alternative ### You want equiprobable numbers between 0 and 2 inclusive, to be able to get one of `Choice`s values. Improving on Edward's answer, this would be: ``` Choice getBotChoice() { constexpr static std::array<Choice,3> choices{ rock, paper, scissors }; static auto rnd{std::mt19937{std::random_device{}()}}; std::uniform_int_distribution<int> distribution(0,choices.size() - 1); return choices[distribution(rnd)]; } ```