Search code examples
c++c++11enumsdifferencestrong-typing

Which to prefer? An enum class, or a nested unnamed enum type?


enum Color1 { red, blue, green }; // ok
// enum Color2 { red, blue, green }; // error, enum conflicts

struct Color3
{
    enum { red, blue, green }; // ok, no conflicts
};

enum class Color4 { red, blue, green }; // ok, no conflicts
  1. Color1 and Color2 are both weak typing.
  2. Color3 and Color4 are both strong typing.

My questions are:

1. Is there any difference between Color3 and Color4?

2. Which to prefer? Color3 or Color4? Why?


Solution

  • Color3 and Color4 are both strong typing

    No. Try this:

    int x = Color3::red; // ok
    int y = Color4::red; // error: cannot convert from 'Color4' to 'int'
    

    The legacy enum is implicitly convertible to an integer, but enum class is it's own type.

    As to which to prefer, refer to Why is enum class preferred over plain enum?