Bei http://blogs.msdn.com/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx gibt es eine Tabelle mit C++ 0x Features, die in 2010 RC implementiert sind. Unter ihnen sind aufgelistete Weiterleitungs-Enums und stark typisierte Enums aufgeführt, aber sie sind als "teilweise" aufgelistet. Der Haupttext des Artikels besagt, dass dies bedeutet, dass sie entweder unvollständig sind oder auf nicht-standardisierte Weise implementiert werden.forward/strong enum in VS2010
Also ich habe VS2010RC und bin mit den C++ 0x Funktionen herumspielen. Ich kann diese nicht herausfinden und kann keine Dokumentation zu diesen beiden Merkmalen finden. Nicht einmal die einfachsten Versuche kompilieren.
enum class E { test };
int main() {}
fails with:
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C2332: 'enum' : missing tag name
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C2236: unexpected 'class' 'E'. Did you forget a ';'?
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C3381: 'E' : assembly access specifiers are only available in code compiled with a /clr option
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C2143: syntax error : missing ';' before '}'
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
int main()
{
enum E : short;
}
Fails with:
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(513): warning C4480: nonstandard extension used: specifying underlying type for enum 'main::E'
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(513): error C2059: syntax error : ';'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
So scheint es, muss es einige völlig Nicht-Standard-Implementierung sein, die sie um diese Funktion zu rechtfertigen erlaubt hat, ruft „teilweise“ done. Wie würde ich diesen Code umschreiben, um auf die Weiterleitungsfunktion und den starken Typ zugreifen zu können?
Einige weiteren Informationen über die neuen Funktionen, die ich zu verwenden ist versucht:
Stark Aufzählungen getippt: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf
Forward-Deklaration von Aufzählungen: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf
Beachten Sie, dass diese separaten Testprogramme sind. E in der zweiten ist kein Versuch, das gleiche E wie in der ersten vorwärts zu deklarieren. –