Während ich an einer C++ - Bibliothek arbeite, die um 2014 herum veröffentlicht wird, habe ich derzeit Design-Entscheidungen zu treffen. Eines der sehr nützlichen Tools, die mit C++ 14 veröffentlicht werden, ist std::optional
. Ich würde gerne wissen, mit welcher Version von g++/libstdc++
kann ich erwarten, es mit -std=c++1y
zu haben.Implementierungsstatus von std :: optional in g ++/libstdC++?
Antwort
Update (Oktober 2016):std::optional
war nicht in dem endgültigen Standard 14 C++, so ist es nie mit -std=c++1y
zur Verfügung. Stattdessen enthält GCC 4.9 std::experimental::optional
, das mit -std=c++1y
verfügbar ist.
GCC 7 schließt std::optional
mit -std=c++1z
, d. H. C++ 17, ein.
Original-Antwort (Juni 2013):
Es ist derzeit nicht implementiert, siehe http://gcc.gnu.org/ml/libstdc++/2013-06/msg00032.html für den Status von C++ 14 Funktionen in GCC Rüssel.
Wenn es implementiert wird, hängt davon ab, wenn jemand freiwillig die Arbeit macht, so ist es unmöglich vorherzusagen.
Ich würde erwarten es wird für GCC 4.9 getan, die kurz vor dem C++ 14 Standard veröffentlicht werden sollte, aber es gibt keine Garantien. Es ist unwahrscheinlich, dass es zu GCC 4.8 hinzugefügt wird, da es bereits freigegeben ist und im Gegensatz zu GCC 4.9 (dh der GCC Subversion Trunk) hat das __cplusplus
Makro den gleichen Wert für -std=c++11
und -std=c++1y
, so dass es für GCC 4.8 keine Möglichkeit gibt, selektiv Funktionen für -std=c++1y
zu aktivieren nur.
"Warum fragen Sie das auf SO" - so finden Leute, die nach Antworten auf SO suchen, es! –
Dies war der beste Google-Hit, als ich untersuchte, warum 'std :: optional' in gcc nicht funktionierte! Also ich bin froh, dass es hier gefragt und beantwortet wurde. –
Wenn die Frage in der gcc-help-Liste gestellt worden wäre, wäre das der Top-Hit gewesen. Wie auch immer, diese Antwort war bis gestern falsch, denn bis C++ 17 gab es so etwas wie 'std :: optional' nicht, so dass es bis vor kurzem in keinem Compiler lief. –
- 1. std :: Zukunft und Klappern mit -stdlib = libstdC++
- 2. consExpr Std :: optional mögliche Implementierung
- 3. std :: optional Spezialisierung für Referenztypen
- 4. std :: align nicht unterstützt von g ++ 4.9
- 5. Debug durch libstdC++
- 6. Wird std :: experimental :: optional <> Support-Referenzen?
- 7. G ++, clang ++ und std :: function
- 8. Cygwin g ++ std :: stoi „Fehler: 'stoi' ist kein Mitglied von‚std
- 9. std :: atomic support in g ++ 4.4.3
- 10. Position von -std = C++ 11 in g ++ Befehlszeile
- 11. Wie aus std :: optional <T>
- 12. trivialen Standard konstruierbar std :: optional und std :: Variante
- 13. boost :: any_cast und std :: optional ist
- 14. Wie bekomme ich -std = C++ 11 mit libstdC++?
- 15. Std :: Regex schlägt mit g ++ fehl?
- 16. GCC/G ++: Aktivieren -std = C++ 11 von Umgebungsvariable
- 17. Cygwin: g ++ 5.2: 'to_string' ist kein Mitglied von 'std'
- 18. Fehlende const_iterator Überlastung von std :: vector :: erase() mit g ++ 4.8
- 19. to_string ist kein Mitglied von Std, sagt so g ++ termux
- 20. abi_tab auf Operator std :: string(): Inkompatibilitäten in Klirren ++ und g ++
- 21. -std = C++ 11 Flag nicht erkannt in G 4.4.6
- 22. Ist std :: get_time in g ++ und clang ++ gebrochen?
- 23. fstream Linkfehler in g ++ mit -std = gnu ++ 0x
- 24. Erstellen von Transaktionsspeicher C++ - Code in g ++
- 25. Wie man libstdC++ statisch mit clang ++
- 26. std :: Versuchs :: optional <T> Implementierung: constexpr Konstruktor Verwirrung
- 27. Segmentierungsfehler in std :: thread :: id's std :: operator ==
- 28. Unterschiedliches Verhalten zwischen libstdC++ und libC++ beim Erstellen von std :: function mit Lambda
- 29. Funktionstyp Spezialisierungstyp - ist es optional?
- 30. Testen, ob die Version von libstdC++ eine C++ 11-konforme std :: string verwendet
Ich änderte den Tag in C++ 1y nach der Meta-Diskussion, die mit dem C++ 14-Tag-Wiki verbunden war, was zu der Entscheidung führte, [Tag: C++ 14] erst zu verwenden, wenn der Final Draft Standard veröffentlicht wurde. – chris
Wenn jemand die Referenzimplementierung verwenden möchte, ist es [hier] (https://github.com/akrzemi1/Optional/). – PeterT