2017-05-30 11 views
8

gcc 7.1.1が含まれている最新のものにアーチlinuxシステムをアップデートしました。エラー発生時にコマンドをclang 4 build error on <functional> with C++ 1z

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

結果を使用して

#include <functional> 

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

:これを構築しようとしている

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>; 

が、これは私の一部に誤り、アーチLinux、または打ち鳴らしますか?

更新(バージョンを追加するのを忘れ)

  • GCCパッケージバージョン7.1.1-2(++ DIRは/ usr /含む/ C提供)
  • 打ち鳴らすパッケージバージョン4.0.0-3
+4

clangのように見えるのは、控除ガイドをまだサポートしていないだけです。 – Barry

+0

ああ、私はここで何が起こっているのか分かりませんでした(そして、それをC++ 17の特徴として忘れてしまった)。ありがとう! – ryan0270

+0

ここで同じエラーが発生します。回避策を見つけましたか?私が見つけた唯一のものは、g ++に切り替えることでした.. –

答えて

6

少し遅れましたが、私はそれを要約したいと思います。

この:

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

は控除ガイドの一例です。 Hereあなたはこの言語機能の素晴らしい説明を見つけることができます。

libstdC++の新しいバージョンでは、-std = C++ 17またはC++ 1zフラグが使用されているときに、その実装で使用されます。 残念ながら、Clangはまだこの機能をサポートしていません。 Clang C++1z status pageは、SVNでのみ利用可能であると報告します。

アーチLinux hereのバグレポートがあります。