来源:
http://dev.firnow.com/course/3_program/c++/cppsl/2008619/126863.html
虽然只是一个warning,但是看起来很不爽。。。。
MSDN上是这么说明的:
compiler warning (level 1) C4482
warning description:
使用了非标准扩展: 限定名中使用了枚举“enum”
当引用类型内的枚举时,无需指定枚举的名称。
文件范围的枚举定义相当于常量,也不需要限定名。
example: C4482(MS Visual Studio)
// C4482.cpp
// compile with: /c /W1
struct S {
enum E { a };
};
int i = S::E::a; // C4482
int j = S::a; // OK
NOTE:
warring
C4482: nonstandard extension used: enum **** used in qualified
name
enumeration:
1. Standard C++ does not allow enumeration names to be used as
scopes (GCC: error)
Visual C++ is half-hearted on the matter. (warrning)
2. C# support enumeration names as scopes.
Workaround: (for MS
Visual Stdio)
if you want to get rid of those obnoxious error message and you’re
using MS Visual Studio, encompass your statement in #pragma
directives. For example,
#pragma warning(push)
#pragma warning(disable : 4482)
... (your statement here) ...
#pragma warning(pop) |
That tells the compiler not to report the C4482 warning for the
code within the block.
You are essentially saying to the compiler, “Yes, I’m doing this
intentionally. I know it’s not comply with the standard, but I want
it done anyway. So build my project and quit your whining!”