Double check it's really an element

  • Uses the range checking form of accessor/mutators of std::bitset after arguments are explicitly range checked. All calls to Flags::get and set use explicit enum elements (no conversion from int/string). At least he didn't try to catch exceptions (thrown if argument to test/set is out of range).

    As usual, the explanation is "what if someone passes in a bad value?"

    enum Item { A, B, C, MAX_ELEMENT };
    class Flags {
        std::bitset<MAX_ELEMENT> flags;
        bool get(Item item) {
            if (item >=0 && item < MAX_ELEMENT) {
                return flags.test(item);
            else {
                return false;
        bool set(Item item) {
            if (item >=0 && item < MAX_ELEMENT) {
    Flags flags;

  • Well, even if the argument to get() and set() is checked automatically, you'd still need to check for MAX_ELEMENT manually. If they're not checked automatically, I don't think it's weird to verify, especially if this class is used in a lot of places.

    I think this may be language confusion? Is there any point in even having MAX_ELEMENT in this language?

Log in to reply

Looks like your connection to What the Daily WTF? was lost, please wait while we try to reconnect.