2012-08-07 14 views
16

Ho appena iniziato a giocare con clangore e ha cercato di compilare il seguente programma di esempio:clang 3.1 non può vedere unique_ptr?

#include <memory> 
#include <iostream> 

int main() 
{ 
    std::unique_ptr<unsigned> u(new unsigned(10)); 
    std::cout << *u << std::endl; 
    return 0; 
} 

Quando compilo Ottengo i seguenti errori:

$ 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. 

Sto usando Clang 3.1 su 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 

Eventuali motivi per cui questo non si compila?

risposta

27

ho preso a compilare utilizzando

clang++ test.cpp -std=c++11 -stdlib=libc++ 
+10

+1 Questo particolare esempio compilerà senza '-std = C++ 11'. Comunque il supporto per 'unique_ptr' è debole in C++ 03, quindi raccomando' -std = C++ 11'. '-stdlib = libC++' sceglie libC++ (http://libcxx.llvm.org). Senza questo flag il valore predefinito di clang è l'utilizzo di libstdC++ da gcc-4.2, che non ha funzioni di libreria C++ 11 (a parte un sottoinsieme nello spazio dei nomi tr1). –

+0

Per dimostrare il problema di cui parla Howard, vedere i quattro casi di test in [Nessun tipo denominato 'unique_ptr' nello spazio dei nomi 'std' durante la compilazione in LLVM/Clang] (http://stackoverflow.com/q/31655462). – jww

Problemi correlati