Kann nicht kompilieren von C++11 Quelle mit GCC 5.1 toolchain

Ich versuche zu kompilieren eine Bibliothek geschrieben, mit C++11 Funktionen mit GCC 5.1 auf Ubuntu. Allerdings beschwert es sich std::unique_ptr ist nicht definiert.

gcc (Ubuntu 5.1.0-0ubuntu11~14.04.1) 5.1.0
g++ (Ubuntu 5.1.0-0ubuntu11~14.04.1) 5.1.0

CXX-flags:

-std=c++11 -Wall -Wextra -Weffc++ -pedantic

Ausgabe:

error: unique_ptr in namespace std does not name a template type
         std::unique_ptr< detail::RegexImpl > m_pimpl;

Allerdings bin ich in der Lage zu kompilieren Sie die exakt gleiche code auf OSX.

Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)

CXX-flags:

-stdlib=libc++ -std=c++11 -Wall -Wextra -Weffc++ -pedantic

Was mache ich falsch?

  • Bitte zeigen Sie die Quelle. Sind Sie einschließlich <memory>?
  • Ich hatte kein problem mit gcc 5.1 auf Ubuntu. Ich habe es kompiliert aus dem source Hinzugefügt, die includes und lib-path env-Variablen und es funktioniert.
  • Es klingt wie Sie sind, sich auf die von der Implementierung abhängig inter-header-Abhängigkeiten. Kein Wunder, wenn nicht-portablen code bricht, wenn Sie versuchen, port, zum Glück ist der fix ist einfach.
  • BTW, ich bin traurig, dass der GCC sagt die irreführende "template-Typ".
  • Ja, es wäre schöner zu sehen, so etwas wie "Fehler: 'unique_ptr' in namespace 'std' existiert nicht" hier. Das würde erfordern einige zusätzliche Arbeit auf dem Teil der GCC-Entwickler, wenn die Fehlermeldung ist geteilt zwischen der "nicht existiert" und "existiert, ist aber nicht eine Vorlage" Fälle, obwohl.
  • Gut, nur ändern Sie ihn auf "Vorlage" wäre ein Anfang 🙂
  • Wusste gar nicht das war, was Sie bedeutete. 🙂 Ja, die standard-Anwendungen "class template" und "function template". Weder "template-Typ" oder "Art Vorlage" ist ein standard-Begriff, aber "Art Vorlage" ist besser im Einklang mit den standard-Bedingungen. (Oder, nach der Bearbeitung, nur "Vorlage" funktioniert auch.)
  • Ich habe überprüft die Quelle, und in der Tat die <Speicher - > enthalten war, fehlt. Ich nahm an, es war dort, weil der code kompiliert wunderbar mit Clang. Ich bin nicht der Autor der Bibliothek, so kann ich nicht kommentieren, inter-header-Abhängigkeiten, aber ist das die Ursache?
  • Ja. Eine Bibliothek header A umfassen kann-Bibliothek header - B für so ziemlich jeden Grund. Wenn Sie brauchen, Bibliothek header B, aber nur include-Bibliothek header - A ist, dann kann es arbeiten einige Implementierungen, und nicht auf andere. Und auch die libc++ hat so still im Lieferumfang enthalten Header.
  • Ja, viele Menschen sind verwirrt, was Vorlagen sind wirklich ein Teil IMO, weil Compiler und Bücher und schlechte tutorials sagen dumme Dinge wie "template-Klasse" als ob das irgendeine Magische Art von Klasse. Sie und ich wissen, dass das nicht der Fall. Wenn Sie wusste, dass es stattdessen ist eine Vorlage, die macht einer Klasse, vielleicht, Sie würden eine einfachere Zeit davon. 🙂 Eh.

InformationsquelleAutor Thijs | 2015-06-15
Schreibe einen Kommentar