16
Właśnie rozpoczął odtwarzanie z brzękiem i próbował skompilować następujący program przykładowy:clang 3.1 nie widzi unique_ptr?
#include <memory>
#include <iostream>
int main()
{
std::unique_ptr<unsigned> u(new unsigned(10));
std::cout << *u << std::endl;
return 0;
}
Kiedy kompilacji otrzymuję następujące błędy:
$ clang++ helloworld.cpp
helloworld.cpp:6:10: error: no member named 'unique_ptr' in namespace 'std'
std::unique_ptr<unsigned> u(new unsigned(10));
~~~~~^
helloworld.cpp:6:29: error: expected '(' for function-style cast or type construction
std::unique_ptr<unsigned> u(new unsigned(10));
~~~~~~~~^
helloworld.cpp:6:31: error: use of undeclared identifier 'u'
std::unique_ptr<unsigned> u(new unsigned(10));
^
helloworld.cpp:7:19: error: use of undeclared identifier 'u'
std::cout << *u << std::endl;
^
4 errors generated.
używam Clang 3.1 na Mac OS X:
$ clang++ --version
Apple clang version 3.1 (tags/Apple/clang-318.0.61) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin11.4.0
Thread model: posix
Wszelkie pomysły, dlaczego nie skompilować?
+1 Ten szczególny przykład zostanie skompilowany bez '-std = C++ 11'. Jednak obsługa 'unique_ptr' jest słaba w trybie języka C++ 03, więc polecam' -std = C++ 11'. '-stdlib = libC++' wybiera libC++ (http://libcxx.llvm.org). Bez tej flagi clang domyślnie używa libstdC++ z gcc-4.2, która nie ma funkcji biblioteki C++ 11 (oprócz podzbioru w przestrzeni nazw tr1). –
Aby zademonstrować problem, o którym mówi Howard, zobacz cztery przypadki testowe w [Brak typu o nazwie "unique_ptr" w przestrzeni nazw "std" podczas kompilowania pod LLVM/Clang] (http://stackoverflow.com/q/31655462). – jww