C++0x Support bei Visual Studio 10 und GCC

2010-04-18 11:08


Bald wird es ja einen neuen C++ Standard geben, welcher schon unter dem Namen C++0x bekannt ist, und später evtl. mal C++10 oder C++11 heissen könnte. Standardisierung war ja bei C++ schon immer ein langwieriger Prozess, so das ein neuer Standard immer ein bedeutender Meilenstein für die Sprache ist. Mit C++0x verliert die Sprache nicht ihre Flexibilität, manches aber vereinfacht sich nun, so ist die neue Bedeutung für auto großartig und eine große Hilfe im Programmieralltag. Einen guten Überblick über C++0x liefern diese 2 Artikel, über die Sprachfeatures und über die Neuerungen in der Standardbibliothek.

Aber Thema in diesem Artikel ist die Compilerunterstützung für C++0x. Was vom Standard ist jetzt bereits ausprobierbar? Exemplarisch möchte ich dies am neuen Visual Studio 10 und GCC 4.4/4.5 zeigen. Während diese Woche Visual Studio von Microsoft vorgestellt wurde, kam bereits eine Woche vorher ein RC des GCC 4.5 zur Veröffentlichung.


Unterstützung von C++0x in MSVS 10 und GCC 4.4/4.5

Wie bereits erwähnt bieten beide Compiler die Unterstützung für einzelne Features des neuen Standards, keine der Implementierungen ist bisher auch nur annähernd komplett. Was ist also jetzt schon davon verfügbar, auf beiden Plattformen? Scott Meyers bietet hier schon eine interessante Aufstellung, welche genau dies beinhaltet, welcher Compiler welches Feature inwieweit unterstützt.
Sprachfeatures welche bereits von beiden Compilern unterstützt werden sind also:
  • auto
  • Lambda Expressions (bei GCC erst mit 4.5)
  • RValue Referenzen
  • decltype
  • static_assert
  • Trailing return Types
  • >> als Abschluss bei Templates (statt > >)
  • long long int und long double
  • extern templates
Neues in der Standardbibliothek in beiden Compilern:
  • Smartpointer
    • shared_ptr
    • weak_ptr
    • unique_ptr
    • und helfer wie make_/allocate_shared,owner_before
  • Fixed Size Array
  • HashTables (unorded)
  • SinglyLinked List (slist<T>)
  • Regular Expressions
  • tuple
  • Type Traits
  • Generalized Function Pointers
  • Generalized Binders
  • Generalized Member Function Adapters
  • Reference Wrappers
  • return type calculation
Beide Compiler bieten zur Zeit keine Unterstützung für die neuen Threading Features, eine Alternative wäre hier natürlich boost::thread, allerdings gibt es mit just::threads auch schon eine Standard konforme Thread Implementierung, welche als Zwischenlösung dienen kann.

Weitere Features


Einige Features sind nicht in beiden Compilern implementiert, sondern jeweils nur in einem davon. Neben dem Fact Sheet von Scott Meyers gibt es für beide Compiler Seiten welche auch diese Auflisten:
Eine Sache die GCC zur Zeit z.B. nicht unterstützt ist nullptr.


... andere Compiler?


Da es auch noch andere Compiler als GCC/MSVC gibt, ist natürlich die Frage nach ihnen berechtigt. Intels ICC ist ebenfalls schon recht weit bei der Implementierung des Standards. Einen Überblick bietet diese Seite. Einen generellen Überblick bietet auch eine Aufstellung im Apache Wiki, wo man sehen kann, das auch der C++ Builder schon einiges Unterstützt. Allerdings haben GCC und MSVC hier eindeutig die Nase vorne, zumindest zur Zeit. Neue Compilerversionen oder Updates dürften im Verlauf des Jahres auch von Intel und Borland zu erwarten sein. Es bleibt also spannend.

Zurück