2013-04-01 12 views
7

Mam ten prosty program, który działa z wątkami. W Clangu dostaję masę mylących, nieistotnych błędów. Oto program:Dlaczego ten podstawowy program wątku kończy się niepowodzeniem z Clang, ale przechodzi w g ++?

#include <iostream> 
#include <thread> 
#include <future> 

int main() 
{ 
    std::packaged_task<int()> task([] { return 1; }); 
    std::future<int> result = task.get_future(); 

    task(); 

    std::cout << "Result was: " << result.get(); 
} 

Błędy:

error: no matching constructor for initialization of 'duration' (aka ' std::chrono::duration<long, std::ratio<1, 1000000> > ') : _d(_t.time_since_epoch()) note: in instantiation of function template specialization 'std::chrono::time_point<std::chrono::system_clock, std::chrono::duration<long, std::ratio<1, 1000000> > >::time_point<std::chrono::duration<long, std::ratio<1, 1000000000> > >' requested here

Jest dużo więcej, ale można go zobaczyć w this link programu. Dziwnie, kompiluje się dobrze w g ++ 4.7.3 i 4.6.3. Dlaczego tak się dzieje tylko w Clang?

Aktualizacja: Jak zauważył David, wydaje się, że zawodzi tylko wtedy, gdy dołączam nagłówek <future>.

+0

Jaka wersja brzękiem? – mkb

+0

@mkb 3.2, najnowsze, jakie zapewnia Liveworkspace. –

+3

Możesz potrzebować '-stdlib = libC++' –

Odpowiedz

6

Jest to udokumentowany błąd w języku clang/libstdC++.

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=666539

http://llvm.org/bugs/show_bug.cgi?id=12893

Od Clang na status page:

Clang's C++11 mode can be used with libc++ or with gcc's libstdc++, but patches are needed to make libstdc++-4.4 work with Clang in C++11 mode. Patches are also needed to make libstdc++-4.6, and libstdc++-4.7 work with Clang releases prior to version 3.2 in C++11 mode.

+0

Wygląda jak błąd w libstdC++, a nie clang. – Omnifarious

+2

Faktycznie w tym '' działa dla mnie. –

+0

@templateboy Okay. Edytowałem swoją odpowiedź. –

1

Jest to niezgodność między libstdC++ i clang. Jeśli miałbyś kompilować przeciwko libstdC++ 4.8.0, ten problem zniknął.

[11:43am][[email protected] /tmp] /opt/llvm/3.2/bin/clang++ -std=gnu++11 -gcc-toolchain /opt/gcc/4.8.0 se.cc |& wc -l 
0 
[11:43am][[email protected] /tmp] /opt/llvm/3.2/bin/clang++ -std=gnu++11 -gcc-toolchain /opt/gcc/4.7.2 se.cc |& wc -l 
21 
Powiązane problemy