在http://blogs.msdn.com/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx上有一张表格,列出了在2010 RC中实现的C++0x特性。其中包括转发枚举和强类型枚举,但它们被列为“部分”。文章的主要内容说这意味着它们可能不完整或以某种非标准的方式实现。
所以我有VS2010RC,并正在尝试使用C++0x特性。我无法理解这两个特性,并且找不到任何关于它们的文档。甚至最简单的尝试都无法编译通过。
enum class E { test }; int main() {}
失败并显示以下错误信息:
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C2332: 'enum' : 缺少标记名称 1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C2236: 意外的 'class' 'E'。是否忘记了 ';'? 1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C3381: 'E':程序集访问说明符仅在使用 /clr 选项编译的代码中可用 1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C2143: 语法错误 : 缺少 ';'(在“}”之前) 1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C4430: 缺少类型说明符 - 假定为 int。注意:C++ 不支持默认 int ========== Build: 0 成功,1 失败,0 最新,0 跳过 ==========
int main() { enum E : short; }
失败并显示以下错误信息:看起来这个实现肯定是非常不标准的,他们似乎认为这个功能只是“部分完成”。我该如何重写这段代码以访问转发和强类型特性呢?
一些关于我正在尝试使用的新功能的进一步信息:
强类型枚举: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf 枚举的前向声明: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf