J'utilise clang
Version 4.0.0 sur mon système exécutant ArchLinux, ça a toujours bien fonctionné, mais récemment je ne peux plus compiler des programmes qui utilisent certains en-têtes STL!Clang ne peut pas compiler les programmes en utilisant l'en-tête <functional>
Détails:
sortie de clang --version
:
clang version 4.0.0 (tags/RELEASE_400/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
sortie de gcc --version
:
gcc (GCC) 7.1.1 20170528
Exemple:
J'ai essayé de compiler le programme trivial suivant:
#include <functional>
int main()
{
return 0;
}
J'utilise la commande suivante:
clang++ -std=c++1z test.cxx
Et le résultat est l'échec:
In file included from test.cxx:3:
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>;
^
3 errors generated.
Est-ce un bogue dans le STL ou est ma configuration foiré?
avez-vous essayé de réorganiser l'ordre des inclusions? C'est ce qui a parfois causé des programmes pour moi. Ou essayez de supprimer '#include' et '#include ' aide ou conduit à une erreur différente –
Vous semblez utiliser la bibliothèque standard gcc C++. Peut-être essayer d'utiliser le clang un. Quelque chose comme '-stdlib = libC++'. – juanchopanza
@ThFl J'ai supprimé tous les autres en-têtes autres que "" et le problème persiste. Je vais modifier la question d'origine. Merci quand même. –
nshct