2017-05-30 15 views
8

Arch linux sistemimi gcc 7.1.1 içeren en yeni sürüme güncelledim. yanlışlıkla komutunuclang 4 C++ 1z ile <functional> üzerinde yapı hatası

clang++ main.cpp -std=c++1z 

sonuçlarını kullanarak

#include <functional> 

int main(int argc, char** argv) { 
    return 1; 
} 

: Bu inşa etmek çalışılıyor

In file included from main.cpp:1: 
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/functional:60: 
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/unordered_map:47: 
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/bits/hashtable.h:37: 
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/bits/node_handle.h:39: 
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/optional:1032:27: error: use of class template 'optional' 
     requires template arguments 
    template <typename _Tp> optional(_Tp) -> optional<_Tp>; 
         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/optional:451:11: note: template is declared here 
    class optional 
     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/optional:1032:40: error: expected ';' at end of declaration 
    template <typename _Tp> optional(_Tp) -> optional<_Tp>; 
            ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/optional:1032:41: error: cannot use arrow operator on a type 
    template <typename _Tp> optional(_Tp) -> optional<_Tp>; 

bu bir benim açımdan hata, kemer linux veya çınlama var mı?

Güncelleme:

  • gcc paket versiyonu 7.1.1-2 (sağlar/usr/include/C++ dir)
  • clang paket versiyonu (versiyonlarını eklemeyi unuttuğu) 4.0.0-3
+4

Clang henüz kesinti kılavuzlarını desteklemiyor gibi görünüyor. – Barry

+0

Ah, Burada olup bitenlerin farkında değildim (ve bunu C++ 17'nin bir özelliği olarak unuttum). Teşekkürler! – ryan0270

+0

Aynı hata burada. Herhangi bir geçici çözüm buldunuz mu? Bulduğum tek şey g ++ 'ya geçmek oldu. –

cevap

6

Biraz geç ama özetlemek istiyorum.

Bu:

template <typename _Tp> optional(_Tp) -> optional<_Tp>; 

kesinti kılavuzları örneğidir. Here Bu dil özelliğinin güzel bir açıklamasını bulabilirsiniz.

LibstdC++'nin yeni sürümü, -std = C++ 17 veya C++ 1z bayrağı kullanımda olduğunda bunu kullanır. Maalesef Clang henüz bu özelliği desteklemiyor. Clang C++1z status page, yalnızca SVN'de mevcut olduğunu bildirir.

Arch Linux here için hata raporunu bulabilirsiniz.