Well it doesn't seem the type of cast matters, but using private enum as opposed to just enum does matter. I'm just wondering why. I'm going through Ivor Horton's Visual C++ 2010 book and ran into this error with one of the exercises. I searched google and found the "fix" but not the reason why it had to be *private* enum in VS2012 and enum was just fine in VS2010. Its just hard to believe one would have to rewrite such simple code from one version of VC++ to the next. I can imagine intricate code would have to be completely rewritten every time a new version of Visual studio comes out. I learned on unix with GNU C many years ago, and am just surprised at how messy that is.